Spring 配置中的 default-lazy-init属性
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属性的更多相关文章
- 解决spring配置中的bean类型的问题:BeanNotOfRequiredTypeException
解决spring配置中的bean类型的问题:BeanNotOfRequiredTypeException这个问题出现的原因:一般在使用annotation的方式注入spring的bean 出现的,具体 ...
- Spring配置中的"classpath:"与"classpath*:"的区别研究(转)
Spring配置中的"classpath:"与"classpath*:"的区别研究(转) 概念解释及使用场景: classpath是指WEB-INF文件夹下 ...
- Spring 配置中的 ${}
Spring 配置中的 ${} <!-- ============ GENERAL DEFINITIONS========== --> <!-- Configurer tha ...
- spring 配置中相关属性的含义:
1:parent元素属性 一个bean定义可能会包含大量的配置信息,包括容器相关的信息(比如初始化方法,静态工厂方法等等)以及构造函数参数和属性的值.一个child bean定义是一个能够从paren ...
- spring aop中的propagation(传播属性)的7种配置的意思
1.前言. 在声明式的事务处理中,要配置一个切面,即一组方法,如 <tx:advice id="txAdvice" transaction-manager="t ...
- Spring配置中<bean>的id和name属性
在BeanFactory的配置中,<bean>是我们最常见的配置项,它有两个最常见的属性,即id和name,最近研究了一下,发现这两个属性还挺好玩的,特整理出来和大家一起分享. 1.id属 ...
- spring配置中,properties文件以及xml文件配置问题
spring方便我们的项目快速搭建,功能强大,自然也会是体系复杂! 这里说下配置文件properties管理的问题. 一些不涉及到代码逻辑,仅仅只是配置数据,可以放在xxxx.properties文件 ...
- Spring配置中<context:annotation-config> VS <context:component-scan>
Spring 中在使用注解(Annotation)会涉及到< context:annotation-config> 和 < context:component-scan>配置, ...
- Spring配置文件中<bean>标签的scope属性
转自:https://fj-sh-chz.iteye.com/blog/1775149 singleton (默认属性) Spring将Bean放入Spring IOC容器的缓存池中,并将Bean引 ...
随机推荐
- 解读oracle执行计划-待续
Cost(%CPU): 优化器估算出完成当前操作的代价(包含子操作的代价),它是IO代价和CPU 代价总和.其中IO代价是最基本的代价.而对于CPU代价,在默认情况下,优化器会将CPU代价计算在内,而 ...
- OC - 23.核心动画基础
概述 简介 核心动画提供了一组非常强大的动画API,通过该组API可以高效的实现绝大部分绚丽的动画效果 注意事项 核心动画的操作在子线程中执行,不会阻塞主线程 核心动画直接作用与CALayer对象上, ...
- Jquery 点击空白处消失
$(document).bind("click", function (e){ if ( $((e.target || e.srcElement)).closest("# ...
- node http.request请求
var http = require('http'); var querystring = require('querystring'); var path = '/cricket/getRecord ...
- 颜色rgb
1.几种基本颜色的rgb 黑色:R.G.B(0.0.0) 白色:R.G.B(255.255.255) 红色:R.G.B(255.0.0) 绿色:R.G.B(0.255.0) 蓝色:R.G.B(0.0. ...
- Java GC 日志输出分析
搜到的几篇讲GC日志的文章,学到了很多东西.但是有些错误或者不够精确的地方. 因此自己尝试着总结一下. 先写个程序,然后结合程序解释每句话的意思. 运行参数 -Xms200M -Xmx200M -Xm ...
- 通过移位与或非运算获取整形最大值,最小值,以及获取输入的int类型整数的二进制表示
以上是最终效果 实现类: package com.corejava.chap02; public class IntBin { private int value; public IntBin(int ...
- OC文件操作(2)
NSFileManager 文件管理器完成文件的创建.移动.拷贝等管理操作 1.查询文件和目录 OC中查询路径下的目录主要分为浅度遍历和深度遍历. 浅度遍历 NSFileManager * ma ...
- Application.Exit()结束程序,但线程还在的解决方法
转自:http://bbs.51cto.com/thread-970057-1.html 出现此情况大多原因是使用了多线程编程,或者你所调用的dll使用了多线程. 我们知道,一般情况下的线程执行完指 ...
- 生成订单唯一id
$yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'); $orderSn = $yCode[intval(date('Y') ...