`

Spring 配置中的 default-lazy-init="false"

 
阅读更多

Spring 配置中的 default-lazy-init="false"

spring的容器是提供了lazy-load的,即默认的缺省设置是bean没有lazy-load,该属性处于false状态,这样导致spring在启动过程导致在启动时候,会默认加载整个对象实例图,从初始化ACTION配置、到service配置到dao配置、乃至到数据库连接、事务等等。
这么庞大的规模,难怪spring的启动时间要花将近1分钟。尝试了一下,把beans的default-lazy-init改为true就,再次启动,速度从原来的55秒,降到8秒钟!!Great!虽然是非常小一个改动,但是影响确实非常大。

Spring的default-lazy-init 与 lazy-init

在同一个文件中<bean />里面设置的优先级大于<beans />里设置的优先级:

 

 

  1. <beans />                <bean />            immediately  
  2. <beans />                <bean lazy-init="true" />   lazy      
  3. <beans />                <bean lazy-init="false"/>   immediately           
  4. <beans default-lazy-init="true"/>  <bean />          lazy  
  5. <beans default-lazy-init="true"/>  <bean lazy-init="true" />     lazy  
  6. <beans default-lazy-init="true"/>  <bean lazy-init="false" />    immediately  
  7. <beans default-lazy-init="false"/>  <bean />             immediately  
  8. <beans default-lazy-init="false"/>  <bean lazy-init="true" />    lazy  
  9. <beans default-lazy-init="false"/>  <bean lazy-init="false" />   immediately  

如果在一个spring配置文件中引入另外的配置文件,如:<import resource="classpath:beanss.xml"/>

则以被引入文件(beanss.xml)中设置的<beans />里的设置为准,与引入文件中的设置无关。

 

 

  1. <bean id="testInit" lazy-init="true" init-method="init" class="com.test.Test">  
  2. </bean>  

如果在一个spring配置文件中引入另外的配置文件,如:<import resource="classpath:beanss.xml"/>

则以被引入文件(beanss.xml)中设置的<beans />里的设置为准,与引入文件中的设置无关。

 

  1. <bean id="testInit" lazy-init="true" init-method="init" class="com.test.Test">  
  2.     </bean>  

spring的default-lazy-init参数

spring在启动的时候,会默认加载会默认加载整个对象实例图,从初始化ACTION配置、到 service配置到dao配置、乃至到数据库连接、事务等等。这样可以减少web服务器在运行时的负担,但是对于开发者来说无疑是效率极低的一个设置了。

    还好,spring提供了default-lazy-init属性,其配置形式如下,applicationContext.xml中:

< beans  default-lazy-init ="true" >  
      < bean  class ="org.xxxx.bean" >  

      。。。。。。

</beans>

    spring配置默认default-lazy-init为false,当配置为true时sping不会再去加载整个对象实例图,大大减少了初始化的时间,减少了spring的启动速度。

    这样做只是为了在开发过程中节约启动时间,在部署到实际环境中,倒是没必要设置default-lazy-init为true。毕竟部署到实际环境中不是经常的事,每次启动1分钟倒不是大问题,而且可以提高服务器效率。

    当然,也不是所有的beans都能设置default-lazy-init成为true.对于scheduler的bean不能用lazy-init  

< beans  default-lazy-init ="true" >  
      < bean  class ="org.springframework.scheduling.quartz.SchedulerFactoryBean" >  
          < property   name ="triggers" >  
              < list >  
                  < ref   bean ="buildHtmlTrigger" />  
                  < ref   bean ="askTrigger" />  
                  < ref   bean ="mailSenderTrigger" />  
                  < ref   bean ="topicDetailBuildTrigger" />  
                  < ref   bean ="forumBuildTrigger" />  
                  < ref   bean ="topicBuildTrigger" />  
              </ list >  
          </ property >  
      </ bean >  
</ beans >  
    这样的话。所有的scheduler就都不管用了。所以请大家要注意。  

 

Spring 中lazy-init 和abstract 属性 

1.lazy-init 
<beans> 
      <bean id="service1" type="bean路径" lazy-init="true"/> 
      <bean id="service2" type="bean路径" lazy-init="false"> 
             <property name="service1" ref="service1"/> 
      </bean> 
</beans> 
以上两个bean,一个lazy-init属性为true,一个为false,由什么区别呢 
当 IoC容器启动时,service2会实例化,而service1则不会;但是但容器实例化service2时,service1也被实例化了,为什么呢,因为service2需要它。也就是说lazy-init="true"的bean,IoC容器启动时不会实例化该bean,只有当容器需要用到时才实例化它。lazy-init有利于容器效率,对于不需要的bean可以先不管。 
2.abstract 
<bean id="baseTxService" 
          class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
       abstract="true"> 
            …… 
</bean> 
bean abstract="true"时,该bean不会被实例化,上面的bean是个模板

     

    分享到:
    评论

    相关推荐

      S变换+Sockwell R G , Mansinha L , Lowe R P . Localization of the complex spectrum: the S transformJ

      s变换用的高斯窗函数( 高斯窗是指数窗的一种,它也无负的旁瓣,而且没有旁瓣波动,因而不回引起计算谱中假的极大值或极小值,而且高斯窗频率窗函数的主瓣比指数窗的主瓣窄,分辨率比指数窗有所提高。

      2021科大讯飞车辆贷违预测大赛冠军源码+全部资料.zip

      2021科大讯飞车辆贷违预测大赛冠军源码+全部资料.zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

      AI图像处理工具包-一键抠图、背景切换、旧照片修复、人像漫画化、视频卡通化(Python+OpenCV+Dlib+TensorFlow).zip

      AI图像处理工具包-一键抠图、背景切换、旧照片修复、人像漫画化、视频卡通化(Python+OpenCV+Dlib+TensorFlow).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!

      基于java+springboot+vue+mysql的远程教育网站设计与实现.docx

      基于java+springboot+vue+mysql的远程教育网站设计与实现.docx

      springboot005学生心理咨询评估系统(源码+数据库+论文+PPT+包调试+一对一指导)

      毕业设计资料,计算机毕业设计,源码,毕业论文,毕业答辩,答辩PPT,Java毕业设计,php毕业设计,ASP.NET毕业设计,毕业指导,计算机作业,php作业,java作业,ASP.NET作业,编程作业,管理系统,网站,app,毕业设计学习,Java学习,php学习,ASP.NET学习,java课程,php课程,ASP.NET课程,答辩技巧,SQLSERVER数据库,Mysql数据库,jdbc,SSM框架,SpringBoot框架,Html5,小程序

      蓝牙串口助手,可以连接HC-05等蓝牙模块,实现单片机设备与手机通讯,安卓手机,蓝牙调试助手,具有按键功能!

      蓝牙串口助手,可以连接HC-05等蓝牙模块,实现单片机设备与手机通讯,安卓手机,蓝牙调试助手,具有按键功能!

      TriLib-2-Model-Loading-Package-2.3.7.unitypackage

      TriLib 2 是一个跨平台的运行时 3D 模型导入器

      “人力资源+大数据+薪酬报告+涨薪调薪”

      人力资源+大数据+薪酬报告+涨薪调薪,在学习、工作生活中,越来越多的事务都会使用到报告,通常情况下,报告的内容含量大、篇幅较长。那么什么样的薪酬报告才是有效的呢?以下是小编精心整理的调薪申请报告,欢迎大家分享。相信老板看到这样的报告,一定会考虑涨薪的哦。

    Global site tag (gtag.js) - Google Analytics