`

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

     

    分享到:
    评论

    相关推荐

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

      default-lazy-init参数是Spring配置文件中的一个全局参数,它控制着所有Bean的实例化时机。默认情况下,default-lazy-init参数的值为false,这意味着所有Bean都会在Spring容器启动时实例化。这样可以减少Web服务器在...

      spring-beans-3.0.xsd

      `&lt;beans&gt;`元素添加了`default-lazy-init`属性,可以设置整个配置文件中所有bean的默认延迟初始化行为。此外,`&lt;constructor-arg&gt;`和`&lt;property&gt;`支持了`ref`和`value`的简写形式,使得配置更简洁。 `spring-beans-...

      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! 控制权:对象的创建和调用...

      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! 控制权:对象的创建和调用...

      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! 控制权:对象的创建和调用...

      struts2 hibernate spring集成

      -- 关于spring启动的优化 default-lazy-init="true" --&gt; &lt;bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt; &lt;property name="location"&gt; ...

      HelloSpring.zip

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

      Spring 延迟实例化

      在Spring中配置一个bean为延迟实例化非常简单,只需要在`&lt;bean&gt;`元素中添加`lazy-init`属性并设置其值为`true`即可。例如: ```xml &lt;bean id="lazyBean" class="com.example.LazyBean" lazy-init="true"&gt; &lt;!-- ...

      第十章 Spring 配置元信息(Configuration Metadata)1

      - `default-init-method`和`default-destroy-method`:用于指定默认的初始化和销毁方法,如果未在Bean定义中指定,容器会尝试调用这些方法。 4. **Spring 外部化配置元信息**:PropertySource表示从外部文件加载的...

      维生药业小项目 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=...

      Spring+Struts2_整合原理

      接着,需要在`web.xml`文件中配置Spring的监听器,以便于启动时加载Spring的上下文。 ```xml &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt; ``` 另外,还需要定义...

      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 ...

      spring 配置文件简单说明

      1. `default-init-method`: 如果设置了这个属性,那么配置文件中所有的Bean在初始化时都会调用指定的方法。这是一个方便的机制,用来确保所有Bean在开始使用前都完成了必要的初始化工作。 2. `default-destroy-...

      truts2+hibernate3.2+spring2.5 proxool成步骤

      default-lazy-init="true"&gt; &lt;!-- 配置PropertyPlaceholderConfigurer以读取jdbc.properties --&gt; &lt;bean id="propertyConfigurer" class="org.springframework.beans.factory.config....

      spring mvc

      当在Spring配置文件中加入`&lt;context:component-scan base-package="leot.test"/&gt;`,Spring会扫描指定包(本例中为"leot.test")及其子包下的所有类,查找带有上述注解的类,并将其注册为Spring管理的Bean。...

      SSH学习之spring

      &lt;beans default-autowire="byName" default-lazy-init="false" default-dependency-check="none"&gt; &lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt; &lt;property name=...

      S2SH xml配置文件

      - `default-lazy-init="true"`表示默认情况下Bean的实例化采用懒加载方式。 ```xml &lt;!-- 源Bean提供Hibernate session factory --&gt; &lt;bean id="dataSource" class="..."&gt; &lt;!-- 数据源配置省略 --&gt; &lt;bean id=...

      Spring2.5学习笔记

      1. **构造器注入**:通过 `&lt;constructor-arg index="" type="" value="" or ref="" /&gt;` 在 `&lt;bean&gt;` 中配置。 2. **Setter 方法注入**:通过提供 setter 方法来注入依赖对象。 3. **Field 注入**:通过使用注解...

      Spring配置使用之Bean生命周期详解

      在 Xml 文件中配置: &lt;bean class="com.demo.Room" init-method="turnOnLights" destroy-method="turnOffLights"/&gt; 在 Ioc 容器中实例化该 Bean,在销毁它。 Spring 配置使用之 Bean 生命周期详解是非常重要的,...

    Global site tag (gtag.js) - Google Analytics