如下内容引用自:http://www.cnblogs.com/wcyBlog/p/3756624.html

1、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
的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销毁时执行的方法。

如下内容引用自:http://blog.csdn.net/lzj0470/article/details/17787165

一个设置为lazy-init属性的bean,就意味要延迟加载,也就是IoC 容器将第一次被用到时才开始实例化。

bean的默认lazy-init=false,不需要延迟加载,IoC 容器将在服务器启动的时候,会解读ApplicationContext.xml文件,不管你是不是要使用该bean,都会先进行实例化。这会造成启动的时候,特别的慢。但是,也是最保险的方法。

据说,在spring设置lazy-init=true的情况下,一个应用可以从 55 秒下降到 8 秒!

Spring延迟加载的更多相关文章

  1. spring定时任务配置,以及不执行的解决办法

    前几天,同事问了我一个问题,我告诉他用spring的定时任务解决,并给他配置了spring的定时任务.当时随便找了一个bean写了一段代码,验证定时任务正确执行后,就没再管,昨天下午,同事写代码的时候 ...

  2. J2EE 基础知识积累

    1. 面向对象的思维: 1. 有哪些类 那些对象      2. 这些类中,每种类应该具有某种属性和方法      3. 考虑类与类之间应该具有什么样的关系 3. 1. 成员变量可以使用java语言中 ...

  3. Spring+SpringMVC+MyBatis深入学习及搭建(七)——MyBatis延迟加载

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6953005.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(六)——My ...

  4. MyBatis延迟加载及在spring中集成配置

     当你要使用one to one,many to one 就会碰到N+1的问题.很明显,对象之间关联很多有A关联B,B关联C,C关联A这样的关系,如果不是采用延迟加载,很容易一下在出现成千上万对象 ...

  5. spring 3.x + hibernate4.x 实现数据延迟加载

      Spring为我们解决Hibernate的Session的关闭与开启问题. Hibernate 允许对关联对象.属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Sess ...

  6. Spring源码分析(二十四)初始化非延迟加载单例

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 完成BeanFactory的初始化工作,其中包括ConversionS ...

  7. Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式

    Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式 主题 概念 Hibernate 延迟加载的代理模式 Spring AOP的代理模式 区别和联系 静态代理和动态代理 概念 代 ...

  8. SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】

    配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter ...

  9. 三 Spring对于延迟加载问题的解决

    Spring提供了延迟加载问题的解决方法 什么是延迟加载? 延迟加载:lazy(懒加载) 执行到该行代码的时候不会发送语句,真正使用这个对象的属性的时候才会发送sql语句进行查询. 类级别延迟加载:指 ...

随机推荐

  1. csa Round #73 (Div. 2 only)

    Three Equal Time limit: 1000 msMemory limit: 256 MB   You are given an array AA of NN integers betwe ...

  2. redis安装、配置和启动

    一.运行环境 1.vmware虚拟机上的centos7系统,安装步骤略,网上搜搜就有,连接工具:secureCRT 2.新安装的linux,是没有wget命令,所以先执行这个命令安装下:yum -y ...

  3. MySQL可供选择的存储引擎

    备注:以下关于5.7版本的内容是来源于官方文档:https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html 以下关于5.6版本的内容,一部 ...

  4. 如何在c#代码中执行带GO语句的SQL文件

      需要在C#代码中执行一个SQL文件的内容.遇到了两个问题: 1. 因为SQL文件中有"GO"语句,执行时报错"Incorrect syntax near 'GO'.& ...

  5. Windows 上的 C++ 编译器

    Windows 上的 C++ 编译器主要有: MinGW (Minimalist GNU for Windows) TDM-GCC (TDM 是 Twilight Dragon Media 的缩写) ...

  6. [LOJ#530]「LibreOJ β Round #5」最小倍数

    [LOJ#530]「LibreOJ β Round #5」最小倍数 试题描述 第二天,LCR 终于启动了备份存储器,准备上传数据时,却没有找到熟悉的文件资源,取而代之的是而屏幕上显示的一段话: 您的文 ...

  7. [luoguP2601] [ZJOI2009]对称的正方形(二维Hash + 二分 || Manacher)

    传送门 很蒙蔽,不知道怎么搞. 网上看题解有说可以哈希+二分搞,也有的人说用Manacher搞,Manacher是什么鬼?以后再学. 对于这个题,可以从矩阵4个角hash一遍,然后枚举矩阵中的点,再二 ...

  8. LA 6450 social advertising(dfs剪枝)

    6450 Social AdvertisingYou have decided to start up a new social networking company. Other existing ...

  9. 标准C程序设计七---64

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  10. mysql开发必知必会

    mysql的数据库的数据库,即存储mysql数据库的底层目录,是在/var/lib/mysql目录下(Linux,win在目录下的data中). 我们新创建的数据库db1就是在/var/lib/mys ...