Spring Framework中的作用域代理

Spring框架提供了Spring bean的作用域。

我们可以使用spring范围控制插入Spring bean的各种依赖关系和配置值。

Spring支持以下六个范围。 在基于Web的应用程序中可以使用六个中的四个:

范围 描述
辛格尔顿 它是Spring框架中的默认范围。 对于每个Spring IOC容器,将仅创建Bean的单个实例。
原型 每当从上下文请求bean时,每次都会创建一个新实例。
请求 Bean范围到HttpServlet Request。 对于每个新请求,将创建一个新的bean实例。该实例仅适用于基于Web的应用程序。
届会 将bean定义的作用域限定为Http会话,对于每个新会话,将返回该bean的新实例,仅在可识别Web的Spring应用程序上下文中有效。
应用 将Bean定义的作用域限定为ServletContext。 仅在可感知网络的Spring应用程序上下文中有效。
网络插座 将bean定义的范围限定在WebSocket会话的生命周期内。 仅在可感知网络的Spring应用程序上下文中有效。

Spring Framework提供了用于创建新范围的接口。

1.将Bean视为依赖项

假设beanA具有单例作用域,而beanB具有原型作用域。 假设beanA具有beanB依赖性。 然后,无需使用任何其他配置,它就提供了随机行为,因为beanA将具有该容器的单个实例,但是beanB将不会具有相同的行为。 每当从容器请求beanB时,都会创建一个新实例。

为了解决这些类型的问题, Java spring框架提供了称为代理bean的概念。

对于范围小于父级的依赖项,框架将创建代理而不是创建实际对象。 这些代理将扩展原始对象。

每当beanB中的方法被调用时,内部都会在代理对象上调用它,而不是在实际对象上调用它。 代理将尝试根据作用域从上下文获取对象,并将对其调用原始方法。
例如,SingletonScopedBean,PrototypeScopedBean是分别具有默认作用域和原型作用域的两个bean。

public class SingletonScopedBean{
private PrototypeScopedBean prototypeScopedBean;  public String getState(){return this.prototypeScopedBean.getState();}
}
Public class PrototypeScopedBean{private final String state;
public String getState() {return state;}
public void setState() {this.state = UUID.randomUUID().toString();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id=”prototypeScopedBean” class=”org.example. PrototypeScopedBean” scope=”prototype” >
<aop:scoped-proxy/>
</bean>
<bean id=”singletonScopedBean” class=”org.example. SingletonScopedBean”>
<property name=”prototypeScopedBean” ref=”prototypeScopedBean”>
</bean>
</beans>

这将为prototypeScopedBean创建代理bean,并将代理作为依赖项附加到singletonScopedBean。

每当在prototypeScopedBean bean上调用getState()方法时,它将在proxy上调用该方法,并且proxy将解析prototypeScopedBean实例,并在已解析的对象上调用getState()方法。

2.可以通过两种方式创建代理

  • 基于JDK的代理
  • 基于CGLIB(动态代理)的代理。

为了创建基于JDK的代理,必须在一个接口上实现该类。

对于基于CGLIB的代理,不存在此限制。

我们可以使用proxy-target-class属性指定代理类型。 如果值为true,则将创建CGLIB代理。 如果该值为false,它将尝试创建基于JDK的代理。

注释方法: Spring框架提供@Scope注释以指定范围。 proxyMode是用于指定代理类型的注释属性。

@Component
@Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class PrototypeScopedBean{private final String state;
public String getState() {return state;}
public void setState() {this.state = UUID.randomUUID().toString();
}
}
@Component
public class SingletonScopedBean{@Autowired private PrototypeScopedBean prototypeScopedBean;public String getState(){return this.prototypeScopedBean.getState();}
}

通过上述更改,SingletonScopedBean将具有PrototypeScopedBean bean类型作为代理。

3. Spring的作用域代理-结论

我们学习了Spring bean作用域,以及如何在bean依赖项中注入各种作用域。 我们还学习了不同类型的代理模式。

翻译自: https://www.javacodegeeks.com/scoped-proxy-in-spring-framework.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中继器、集线器、网桥、网关产品介绍

在了解通信原理之前&#xff0c;我们首先要对通信常用的设备进行熟悉&#xff0c;计算机网络体系中&#xff0c;有几样通信设备或者说网络名词出现的频率相当高&#xff0c;它们是&#xff1a;中继器、集线器、网桥、交换机、路由器和网关。其实&#xff0c;弄清楚这几个计算机…

串口转换器的工作方式及通讯模式介绍

串口转换器能让您在配有RS-232的系统上使用RS-422及RS-485。它透明地将RS-232信号转成隔离的RS-422或RS-485信号。对此&#xff0c;您无需改变PC机任何的硬件或软件就能让您利用标准的PC硬件&#xff0c;来轻松构建一个工业级的长距离通信系统&#xff1b;基于TCP/IP和RS-485/4…

java8根据某个id删选_Java 8可选:如何使用它

java8根据某个id删选Java 8带有新的Optional类型&#xff0c;类似于其他语言中可用的类型。 这篇文章将介绍这种新类型的使用方式&#xff0c;即主要用途。 什么是可选类型&#xff1f; 可选的是新容器类型&#xff0c;如果有可用值&#xff0c;则该容器类型将包装单个值。 因…

Java中的瞬态关键字及其使用

最近&#xff0c;我在一个朋友的一个研究项目中遇到了十字架&#xff0c;他们正在学习Java编程的基础知识&#xff0c;一些忘记的敏感信息打印在文本文件中&#xff0c;并记住了Java中的瞬时关键字。 Java中的瞬时关键字在安全性方面起着重要作用&#xff0c;并且在上述类似的…

RS-232/E1协议转换器产品介绍

RS-232/E1协议转换器是我公司自主研发生产的高性能产品&#xff0c;它将透明E1转换为V.35或者RS232的异步数据接口的接口转换设备&#xff0c;本设备V.35接口可以连接DCE或DTE两种工作方式的设备&#xff0c;RS232接口只支持异步RS232数据&#xff0c;可支持的最高异步速率为11…

java ee cdi_Java EE CDI限定词:快速浏览

java ee cdi在上下文和依赖注入&#xff08;CDI&#xff09;中&#xff0c; 限定符是类型安全和松散耦合的主体。 为什么&#xff1f; 没有CDI&#xff0c;我们将以类似于下面的方式注入Java EE组件 注意&#xff1a;这实际上不会编译&#xff0c;只是假设的代码片段 例子1 …

什么是串口协议转换器?串口转换器有哪些特点?

串口转换器是为RS-232/485/422到TCP/IP之间完成数据转换的通讯接口转换器。通过作为服务器端&#xff0c;提供RS-232/485/422终端串口与TCP/IP网络的数据双向透明传输&#xff0c;提供串口转网络功能&#xff0c;RS-232/485/422转网络的解决方案&#xff0c;可以让串口设备立即…

485转232转换器产品介绍及性能参数介绍

配有不同标准串行接口的计算机、外部设备或智能仪器之间进行远程数据通信&#xff0c;需要进行标准串行接口的相互转换。485转换器将单端的RS-232信号转换为平衡差分的RS-485或RS-422信号。RS-485、RS-422自动识别功能&#xff0c;使用更加简单。接下来我们就来为大家详细介绍下…

什么是RS232/RS485转换器?

485转以太网提供串口转网络功能&#xff0c;能够将RS-232/485/422串口转换成TCP/IP网络接口&#xff0c;实现RS-232/485/422串口与TCP/IP网络接口的数据双向透明传输。使得串口设备能够立即具备TCP/IP网络接口功能&#xff0c;连接网络进行数据通信&#xff0c;极大的扩展串口设…

apache jmx_用于JMX访问的Apache Ant任务

apache jmx我想从Ant任务中调用JMX操作。 但是&#xff0c;找到可用的蚂蚁任务库及其用法非常棘手。 因此&#xff0c;让我分享我的经验&#xff0c;使他人更轻松。 JMX操作的Ant任务 我决定遵循Tomcat文档&#xff0c;并使用与tomcat一起分发的ant任务。 仅作记录用途&#…

E1协议转换器使用中常见故障问题及处理方法总结

E1协议转换器也叫接口转换器&#xff0c;是实现数据通信网以太网接口与光纤通信传送网E1接口连接时进行两种接口转换的设备。广泛应用在传输站E1接口与网络交换机相连时的接口转换中。现飞畅科技小编对其使用过程中常见故障及解决方法进行归纳&#xff0c;希望对大家在应用此类…

使JavaDoc保持最新状态的工具

在许多项目中&#xff0c;文档不是最新的。 更改代码后&#xff0c;很容易忘记更改文档。 原因是可以理解的。 在代码中进行更改&#xff0c;然后调试&#xff0c;然后希望在测试中进行更改&#xff08;或者&#xff0c;如果您使用的是更多TDD&#xff0c;则以相反的顺序进行更…

RS485转换器常见问题总结

通讯转换器主要应用于支持RS485通讯总线结构的工业控制自动化系统&#xff0c;其中包括一卡通、门禁系统、消费系统、考勤系统、、监控、楼宇对讲、停车场系统、自助银行系统、公共汽车收费系统、公路收费站系统等等。但是&#xff0c;我们在使用485转换器的过程中难免会遇到各…

hd-sdi转hdmi转换器产品规格参数及接口定义详解

hd-sdi转hdmi转换器可方便的将HD-SDI 信号转为HDMI 信号&#xff0c;同时会将SDI所带音频信号分离转换后嵌入到HDMI 信号中&#xff0c;以实现声音及图像同步传输。专为电视台、平安城市、公安交警、高速公路、应急指挥中心的高清视频显示等环境提供项目解决方案。接下来就由飞…

singleton设计模式_Java Singleton设计模式

singleton设计模式它是Java中最简单的设计模式之一。 如果有人问我哪种设计模式好&#xff0c;那么我会很自豪地说Singleton。 但是&#xff0c;当他们深入询问单身人士的概念时&#xff0c;我感到很困惑。 真的单身是那么困难吗&#xff1f; 确实不是&#xff0c;但是它有…

HD-SDI转HDMI转换器工作原理及功能介绍

高清HD-SDI转HDMI转换器是一款专用于单路高清数字分量串行接口(HD-SDI和3G-SDI)信号转换为HDMI信号的设备。该设备集成SDI接收器及HDMI调制器&#xff0c;可方便的将HD-SDI信号转为HDMI信号&#xff0c;同时会将SDI所带音频信号分离转换后嵌入到HDMI信号中&#xff0c;以实现声…

注释处理和JPMS

TLDR&#xff1b; 代替annotation.getClass().getMethod("value")调用annotation.annotationType().getMethod("value") 。 所有Java开发人员都听说过注释。 自Java 1.5&#xff08;或者您坚持认为只有1.6&#xff09;以来&#xff0c;我们便有了注释。 根…

HD-SDI转HDMI转换器怎么连接?hd-sdi转hdmi转换器常见故障有哪些?

高清HD-SDI转HDMI转换器是一款专用于单路高清数字分量串行接口(HD-SDI和3G-SDI)信号转换为HDMI信号的设备。hd-sdi转hdmi转换器将广播级输出图像使用的SDI信号转换成HDMI影像信号&#xff0c;中继广播与消费型产品的链接器&#xff0c;让SDI信号格式不用经剪辑软件再一次的转换…

sdi转hdmi转换器应用领域及规格参数详解

SDI转HDMI转换器 是一款专用于单路高清数字分量串行接口(HD-SDI&#xff0c;3G-SDI和SD-SDI)信号转换为HDMI 信号的设备。该设备集成SDI 接收器及HDMI 调制器&#xff0c;可方便的将SDI 信号转为HDMI 信号&#xff0c;同时会将SDI所带音频信号分离转换后嵌入到HDMI 信号中&…

Cassandra中的数据建模

在关系数据模型中&#xff0c;我们为域中的每个对象建模关系/表。 对于Cassandra&#xff0c;情况并非如此。本文将详细介绍在Cassandra中进行数据建模时需要考虑的所有方面。 以下是Cassandra数据建模的粗略概述。 从上图可以看出&#xff0c; 概念数据建模和应用程序查询是构…