博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring的lazy-init详解
阅读量:6520 次
发布时间:2019-06-24

本文共 1397 字,大约阅读时间需要 4 分钟。

Spring中lazy-init详解

ApplicationContext实现的默认行为就是在启动服务器时将所有singleton bean提前进行实例化
(也就是依赖注入)。提前实例化意味着作为初始化过程的一部分,applicationContext实例会创
建并配置所有的singleton bean。通常情况下这是一件好事,因为这样在配置中的任何错误就会
被立刻实现(否则的话可能要话几个小时甚至几天)。

<bean id="testBean" class="cn.itcast.test.TestBean" />

该bean默认的设置为:

<bean id="testBean" calss="cn.itcast.test.TestBean" lazy-init="false" />

lazy-init="false"

立即加载,表示在spring启动时,立刻进行实例化。

有时候这种默认处理可能并不是你想要的。

如果你不想让一个singleton bean在ApplicationContext

实现初始化时被提前实例化,那么可以将bean设置为延时实例化。

<bean id="testBean" calss="cn.itcast.test.TestBean" lazy-init="true" /> (或者@Lazy(true))延时加载,设置为lazy

的bean将不会在ApplicationContext启动时提前被实例化,而是第一次向容器通过getBean索取bean时实例化的。

如果一个设置了立即加载的bean1,引用了一个延时加载的bean2,那么bean1在容器启动时被实例化,而bean2

由于被bean1引用,所以也被实例化,这种情况也符合延时加载的bean在第一次调用时才被实例化的规则。

在容器层次中通过在<beans/>元素上使用'default-lazy-init'属性来控制延时初始化也是可能的。如下面配置:

<beans default-lazy-init="true"><!-- no beans will be eagerly pre-instantiated... --></beans>

注意:

如果一个bean的scope属性为scope="pototype"时,即使设置了lazy-init="false",容器启动时不实例化bean,

而是调用getBean方法实例化的
另外说明:
.init-method属性指定初始化时执行的方法,distory-method属性指定bean销毁时执行的方法。
用途: 通常用于解决spring循环引用的问题: (A->B->A,A->B->C->A)
This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching – consider using ‘getBeanNamesOfType’ with the ‘allowEagerInit’ flag turned off, for example.

转载于:https://www.cnblogs.com/brant/p/5723932.html

你可能感兴趣的文章
记录一次处理https监听不正确的过程
查看>>
SCOM 2012 SP1服务器上安装和配置Veeam MP for VMware
查看>>
多核编程的四层境界
查看>>
Windows Phone 实用开发技巧(11):让StackPanel中的控件靠右对齐
查看>>
小记如何修改xen模块
查看>>
实时游戏对战引擎Photon
查看>>
C语言位操作控件属性
查看>>
nginx的安装及基本配置,及多个域名服务
查看>>
Servlet访问postgresql数据库并提取数据显示在前端jsp页面
查看>>
不改一行代码定位线上性能问题
查看>>
定义运算符
查看>>
git管理
查看>>
告别暗黄皮肤变水嫩皮肤的8个小习惯
查看>>
加强Eclipse代码自动提示的方法
查看>>
exchange online 用户疑问之许可证和用户数据归档
查看>>
QImage Mat IplImage 之间的相互转换
查看>>
使用eclipse与android studio 在开发自定义控件时的区别
查看>>
我的友情链接
查看>>
mysql学习笔记
查看>>
年年有鱼游戏Android源码项目
查看>>