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 />里设置的优先级:





view plaincopy to clipboardprint?

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 />里的设置为准,与引入文件中的设置无关。





view plaincopy to clipboardprint?

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属性的更多相关文章

  1. 解决spring配置中的bean类型的问题:BeanNotOfRequiredTypeException

    解决spring配置中的bean类型的问题:BeanNotOfRequiredTypeException这个问题出现的原因:一般在使用annotation的方式注入spring的bean 出现的,具体 ...

  2. Spring配置中的"classpath:"与"classpath*:"的区别研究(转)

    Spring配置中的"classpath:"与"classpath*:"的区别研究(转)   概念解释及使用场景: classpath是指WEB-INF文件夹下 ...

  3. Spring 配置中的 ${}

    Spring 配置中的 ${}     <!-- ============ GENERAL DEFINITIONS========== --> <!-- Configurer tha ...

  4. spring 配置中相关属性的含义:

    1:parent元素属性 一个bean定义可能会包含大量的配置信息,包括容器相关的信息(比如初始化方法,静态工厂方法等等)以及构造函数参数和属性的值.一个child bean定义是一个能够从paren ...

  5. spring aop中的propagation(传播属性)的7种配置的意思

      1.前言. 在声明式的事务处理中,要配置一个切面,即一组方法,如 <tx:advice id="txAdvice" transaction-manager="t ...

  6. Spring配置中<bean>的id和name属性

    在BeanFactory的配置中,<bean>是我们最常见的配置项,它有两个最常见的属性,即id和name,最近研究了一下,发现这两个属性还挺好玩的,特整理出来和大家一起分享. 1.id属 ...

  7. spring配置中,properties文件以及xml文件配置问题

    spring方便我们的项目快速搭建,功能强大,自然也会是体系复杂! 这里说下配置文件properties管理的问题. 一些不涉及到代码逻辑,仅仅只是配置数据,可以放在xxxx.properties文件 ...

  8. Spring配置中<context:annotation-config> VS <context:component-scan>

    Spring 中在使用注解(Annotation)会涉及到< context:annotation-config> 和 < context:component-scan>配置, ...

  9. Spring配置文件中<bean>标签的scope属性

    转自:https://fj-sh-chz.iteye.com/blog/1775149 singleton  (默认属性) Spring将Bean放入Spring IOC容器的缓存池中,并将Bean引 ...

随机推荐

  1. 【转】无废话WCF系列教程

    转自:http://www.cnblogs.com/iamlilinfeng/category/415833.html     看后感:这系列的作者李林峰写得真的不错,通过它的例子,让我对WCF有了一 ...

  2. c++primerplus(第六版)编程题——第3章(数据类型)

    声明:作者为了调试方便,每一章的程序写在一个工程文件中,每一道编程练习题新建一个独立文件,在主函数中调用,我建议同我一样的初学者可以采用这种方式,调试起来会比较方便. 工程命名和文件命名可以命名成易识 ...

  3. SGU 103.Traffic Lights(最短路)

    时间: 0.50 second(s) 空间: 4096 kilobytes 输入: 标准输入 输出: 标准输出 Dingiville 城市的交通规则非常奇怪,城市公路通过路口相连,两个不同路口之间最多 ...

  4. tbody 滚动条

    ARRIVALS TO BRISTOL - ENGLAND FLIGHT CODE FROM STA ETA Notes T3 4264 ISLE OF MAN 11:40 11:42 LANDED ...

  5. underscorejs-partition学习

    2.25 partition 2.25.1 语法: _.partition(list, predicate, [context]) 2.25.2 说明: 拆分list为两个数组. 第一个数组的元素都满 ...

  6. PHP 开启 ssh2

    首先,为PHP安装SSH2扩展需要两个软件包, libssh2和ssh2(php pecl拓展). 两者的最新版本分别为libssh2-1.5.0.tar.gz和ssh2-0.12.tgz,下载地址分 ...

  7. opencv之图像腐蚀

    最近准备好好学习opencv 这博客就是我的学习笔记. #include <cv.h> #include <highgui.h> using namespace std; vo ...

  8. C语言结构体(struct)使用方法

    基本定义:结构体,通俗讲就像是打包封装,把一些变量有共同特征(比如同属于某一类事物的属性)的变量封装在内部,通过一定方法访问修改内部变量. 结构体定义: 第一种:只有结构体定义 struct stuf ...

  9. 3.1决策树理论--python深度机器学习

    参考彭亮老师的视频教程:转载请注明出处及彭亮老师原创 视频教程: http://pan.baidu.com/s/1kVNe5EJ   0. 机器学习中分类和预测算法的评估:   准确率 速度 强壮行 ...

  10. 从ipad相机相册读取相片并保存

    以下是从实际项目中截取的例子,从一个button中启动获得相片 -(IBAction)blumbtnTap:(id)sender { // 判断是否支持相机 // UIAlertView *alert ...