spring中lazy-init详解
2016-05-14 12:58
471 查看
ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化(也就是依赖注入)。提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并配置所有的singleton bean。通常情况下这是件好事,因为这样在配置中的任何错误就会即刻被发现(否则的话可能要花几个小时甚至几天)。
<bean id="testBean" class="com.fhx.TestBean"> 该bean默认的设置为:
<bean id="testBean" class="com.fhx.TestBean" lazy-init="false"> lazy-init="false" 立退加载, 表示spring启动时,立刻进行实例化。
(lazy-init 设置只对scop属性为singleton的bean起作用)
有时候这种默认处理可能并不是你想要的。如果你不想让一个singleton bean在ApplicationContext实现在初始化时被提前实例化,那么可以将bean设置为延迟实例化。
<bean id="testBean" class="com.fhx.TestBean" lazy-init="true">, lazy-init="true"> 延迟加载 ,设置为lazy的bean将不会在ApplicationContext启动时提前被实例化,而是在第一次向容器通过getBean索取bean时实例化的。
如果一个设置了立即加载的bean1,引用了一个延迟加载的bean2,那么bean1在容器启动时被实例化,而bean2由于被bean1引用,所以也被实例化,这种情况也符合延迟加载的bean在第一次调用时才被实例化的规则。
在容器层次中通过在<beans/>元素上使用'default-lazy-init'属性来控制延迟初始化也是可能的。如下面的配置:
<beans default-[b]lazy-init="true"[/b]><!--
no beans will be eagerly pre-instantiated... --></beans>
如果一个bean的scope属性为scope=“pototype“时,即使设置了lazy-init="false",容器启动时不实例化bean,而是调用getBean方法是实例化的
另外加以说明:
.init-method属性指定初始化时执行的方法,distory-method属性指定bean销毁时执行的方法。
<bean id="testBean" class="com.fhx.TestBean"> 该bean默认的设置为:
<bean id="testBean" class="com.fhx.TestBean" lazy-init="false"> lazy-init="false" 立退加载, 表示spring启动时,立刻进行实例化。
(lazy-init 设置只对scop属性为singleton的bean起作用)
有时候这种默认处理可能并不是你想要的。如果你不想让一个singleton bean在ApplicationContext实现在初始化时被提前实例化,那么可以将bean设置为延迟实例化。
<bean id="testBean" class="com.fhx.TestBean" lazy-init="true">, lazy-init="true"> 延迟加载 ,设置为lazy的bean将不会在ApplicationContext启动时提前被实例化,而是在第一次向容器通过getBean索取bean时实例化的。
如果一个设置了立即加载的bean1,引用了一个延迟加载的bean2,那么bean1在容器启动时被实例化,而bean2由于被bean1引用,所以也被实例化,这种情况也符合延迟加载的bean在第一次调用时才被实例化的规则。
在容器层次中通过在<beans/>元素上使用'default-lazy-init'属性来控制延迟初始化也是可能的。如下面的配置:
<beans default-[b]lazy-init="true"[/b]><!--
no beans will be eagerly pre-instantiated... --></beans>
如果一个bean的scope属性为scope=“pototype“时,即使设置了lazy-init="false",容器启动时不实例化bean,而是调用getBean方法是实例化的
另外加以说明:
.init-method属性指定初始化时执行的方法,distory-method属性指定bean销毁时执行的方法。
相关文章推荐
- Java基础知识---线程的中断
- 【SSH网上商城项目实战13】Struts2实现文件上传功能
- 初次使用java进行web开发的一些问题
- spring.net 集成nhibernate配置文件(这里暴露了GetCurrentSession 对于 CurrentSession unbond thread这里给出了解决方法)
- 小代码 二叉树 java2
- 小代码 二叉树 java1
- struts2 多文件上传
- Running Dubbo On Spring Boot
- spring通知-BeforeAdvice和AfterReturningAdvice
- eclipse + pydev 创建django项目
- Spring Boot 中使用log4jdbc记录SQL的运行时参数
- (3)使用IntelliJ IDEA建立maven项目
- java 字符串编码转换(注意:编码转换不一定是完全可逆的,可能存在数据丢失情况)
- 小代码 java字符统计
- the environment variable java_home does not point to a valid JVM installation.
- JAVA-基本数据类型与引用数据类型区别
- java中克隆研究
- JAVA-封装
- 35-001-4 Struts中的表单数据输入的验证问题
- JAVA构造方法