`

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

阅读更多

来源:http://thinkerandthinker.iteye.com/blog/1337706

 

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"/>  <!-- 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是个模板

分享到:
评论

相关推荐

    浅谈spring中的default-lazy-init参数和lazy-init

    下面小编就为大家带来一篇浅谈spring中的default-lazy-init参数和lazy-init。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    spring 配置文件简单说明

    1)default-init-method ="方法名" 定义在此配置文件中的bean都会执行指定的init方法。 2)default-destroy-method="方法名" 定义在此配置文件中的bean都会在执行指定的destroy方法。 3)default-lazy-init ="false|...

    spring1.2学习心得分享

    初始化:&lt;bean init-method=""/&gt; e.资源释放:&lt;bean destroy-method=""/&gt;仅对单例对象有效 (2)IoC概念 Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! 控制权:对象的创建和调用...

    spring1.1开发理解

    初始化:&lt;bean init-method=""/&gt; e.资源释放:&lt;bean destroy-method=""/&gt;仅对单例对象有效 (2)IoC概念 Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! 控制权:对象的创建和调用...

    spring学习心得

    初始化:&lt;bean init-method=""/&gt; e.资源释放:&lt;bean destroy-method=""/&gt;仅对单例对象有效 (2)IoC概念 Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! 控制权:对象的创建和调用...

    HelloSpring.zip

    我的博客中“maven环境搭建及Spring入门”的项目代码。在idea中运行成功。 1。创建IOC容器 2。通过xml装配对象 【简单类型用value、复杂(引用类型)用ref、数组,集合,Map的装配】 ...default-lazy-init=true

    维生药业小项目 SSH简单学习项目

    default-lazy-init="false" default-autowire="byName"&gt; &lt;context:annotation-config/&gt; &lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"&gt; &lt;property name="driverClass" value=...

    springframework.4.3.22.RELEASE

    'default-lazy-init' attribute is not processed when XSD validation is disabled [SPR-8335] #12983 Spring JavaMailSenderImpl does not show proper message when recipient list is empty [SPR-17540] #22072 ...

    基于SpringJDBC的BaseDAO

    实现了简单的ORM增删改查。 ... abstract="false" lazy-init="default" autowire="default" dependency-check="default"&gt; &lt;property name="dataSource"&gt; &lt;ref local="dataSource" /&gt; &lt;/bean&gt;

    SpringMVC-SSH全注解

    default-lazy-init="true"&gt; &lt;context:annotation-config/&gt; &lt;!-- 扫描包 --&gt; &lt;context:component-scan base-package="com.org.core"/&gt; &lt;bean id="jspViewResolver" class="org.springframework.web.servlet....

    Spring的学习笔记

    (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:annotation方式Spring 16 一、 开始使用annotation配置Spring 16 二、 @Autowired、@Qualifier 16...

    spring2.5 学习笔记

    (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:annotation方式Spring 16 一、 开始使用annotation配置Spring 16 二、 @Autowired、@Qualifier 16...

    springframework.5.0.12.RELEASE

    New Features FormHttpMessageConverter should support non-String form values [SPR-17645] #22174 ...'default-lazy-init' attribute is not processed when XSD validation is disabled [SPR-8335] #12983

    spring.xls

    * lazy-init为“default/false”当启动spring容器的时候创建bean 但是如果该bean是prototype时,特殊。这种情况无效 * 在spring容器启动的时候,就会发现错误 * 有可能会造成一些数据长时间驻留在内存中 * lazy...

    spring2.5.6源码

    logger.debug("Default lazy init '" + getDefaultLazyInit() + "'"); logger.debug("Default autowire '" + getDefaultAutowire() + "'"); logger.debug("Default dependency check '" + ...

    cms后台管理

    &lt;/init-param&gt; &lt;load-on-startup&gt;2&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;JeeCmsFront&lt;/servlet-name&gt; &lt;url-pattern&gt;*.jhtml&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;servlet-mapping&gt; ...

Global site tag (gtag.js) - Google Analytics