spring 使用depends-on, lazy-init, defalut-lazy-init
depends-on
如果一个bean是另一个bean的依赖, 可以使用ref属性或者<ref/>标签来实现依赖
那么被依赖bean一定是要比依赖bean率先实例化, 而depends-on属性会使更明确,更强迫bean在引用前就会被初始化
depends-on是指指定Bean初始化及销毁时的顺序
使用depends-on属性指定的Bean要先初始化完毕后才初始化当前Bean,由于只有"singleton"Bean才能被Spring管理销毁,所以当指定的Bean都是"singleton"时,使用depends-on属性指定的Bean要在指定的Bean之后销毁
<bean id="helloApi" class="com.feng.spring.chapter2.helloworld.HelloApi">
</bean>
<bean id="decorator"
class="cn.javass.spring.chapter3.bean.HelloApiDecorator"
depends-on="helloApi">
<property name="helloApi"><ref bean="helloApi"/></property>
</bean>
helloApi会先于decorator初始化
总结: depends-on指定的bean会比当前bean先初始化, 后销毁
当然, 哪怕不指定也不会报错, spring会初始化所有单例bean, 依赖关系的先后实例化问题也会被解决,只是使用depends-on会更加明确更加强迫
延迟加载bean
lazy-init
默认情况下, ApplicationContext会预初始化所有的单例bean.
如果这个bean在开发过程中当前不需要的,并且自己又不想删去,担心万一以后需要, 可以将该bean标记为延迟加载来阻止预初始化,从而可以减少spring启动时间
当引用该bean时才被实例化, 如果作为单例的依赖时,它会随着单例bean的实例化而实例化.
<bean id="helloApi" class="cn.javass.spring.chapter2.helloworld.HelloImpl" lazy-init="true"/>
总结: 延迟加载的bean只有被引用时才实例化
default-lazy-init
spring在启动的时候,会默认加载会默认加载整个对象实例图,从初始化ACTION配置、到 service配置到dao配置、乃至到数据库连接、事务等等。这样可以减少web服务器在运行时的负担,但是对于开发者来说无疑是效率极低的一个设置, 因为需要不断运行程序来测试代码
还好,spring提供了default-lazy-init属性
<beans default-lazy-init="true">
.....
</beans>
spring的默认配置是false, 当配置为true后,spring不会再去加载整个对象示例图,大大减少了初始化的时间,减少了spring的启动速度。
这样做只是为了在开发过程中节约启动时间,在部署到实际环境中,倒是没必要设置default-lazy-init为true。毕竟部署到实际环境中不是经常的事,每次启动1分钟倒不是大问题,而且可以提高服务器效率
当然,也不是所有的beans都能设置default-lazy-init成为true.对于scheduler的bean不能用lazy-init
spring 使用depends-on, lazy-init, defalut-lazy-init的更多相关文章
- Spring报错: org.springframework.beans.factory.support.BeanDefinitionValidationException: Couldn't find an init method named 'init' on bean with name 'car'(待解答)
在Spring工程里,有一个Car类的bean,Main.java主程序,MyBeanPostProcessor.java是Bean后置处理器. 文件目录结构如下: Car.java package ...
- git init和git init -bare区别
1 Git init 和 git init –bare 的区别 用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作.但别的用户在将更新push上来的 ...
- git init 与 git init --bare 的区别
git init 和 git init –bare 的区别 使用命令"git init --bare"(bare汉语意思是:裸,裸的)初始化的版本库(暂且称为bare repos ...
- Android的init过程:init.rc解析流程
这几天打算看下安卓的代码,看优秀的源代码也是一种学习过程,看源代码的过程就感觉到,安卓确实是深受linux内核的影响,不少数据结构的使用方法全然一致.花了一中午时间,研究了下init.rc解析过程,做 ...
- git init 与 git init --bare 区别
git init 与 git init --bare 区别 发现问题 最早是在公司的wiki上发现了这个命令,google后发现值得记录下来 实践中发现的区别 网上找了很多资料,但说的很乱,干脆在自己 ...
- Android修改init.rc和init.xx.rc文件【转】
本文转载自:https://blog.csdn.net/u013686019/article/details/47981249 一.文件简介 init.rc:Android在启动过程中读取的启动脚本文 ...
- android init进程分析 init脚本解析和处理
(懒人近期想起我还有csdn好久没打理了.这个android init躺在我的草稿箱中快5年了.略微改改发出来吧) RC文件格式 rc文件是linux中常见的启动载入阶段运行的文件.rc是run co ...
- git init和git init –bare的区别:
感谢原文作者:ljchlx 原文链接:https://blog.csdn.net/ljchlx/article/details/21805231 git init 和 git init –bare 的 ...
- hibernate 中的 lazy=”proxy” 和 lazy=”no-proxy” 的区别
网上找到个描述的很精妙的例子 Child <- many-to-one ->Parent class Child { private ...
- 【2016-10-11】Linux系统常用的关机或重启命令shutdown、reboot、halt、poweroff、init 0及init 6的联系与区别
Linux下常用的关机/重启命令一般包括: shutdown.reboot.halt.poweroff等,当然了我们可以使用init 运行等级runlevel 0即halt来关机,或使用init 运行 ...
随机推荐
- IoC容器-Bean管理XML方式(p名称空间注入)
5,p名称空间注入(简化xml配置) (1)使用p名称空间注入,可以简化基于xml配置方式 (了解实际用不多) 第一步 添加 p 名称空间在配置文件中 第二步 进行属性注入,在bean标签里面进行 ...
- fluentd分布式日志管理系统
如何有效地收集和管理大量服务器的日志一直是企业很头疼的一个问题,部分企业应用shell脚本来管理,部分企业基于hadoop来开发自己的日志管理系统,第一种管理成本巨大,需要大量的人力来维护脚本的正常运 ...
- sql 同步远程数据库(表)到本地
一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...
- springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格)
一.springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格) 1.实现简单的消费者和生产者 springcloud使用的http协议进行传输数据,也就是说springclo ...
- Transformer可解释性:注意力机制注意到了什么?
原创作者 | FLPPED 论文: Self-Attention Attribution: Interpreting Information Interactions Inside Transform ...
- django入门 03 模板语法
变量值从views.py传入html 基本语法 {{ abc }} 变量abc外,用双大括号包裹 {% for item in abc %} 语句外,用大括号+百分号包裹 1. 传递字符串 views ...
- ApacheCN Linux 译文集 20211129 更新
笨办法学 Linux 中文版 练习 0:起步 练习 1:文本编辑器,vim 练习 2:文本浏览器,少即是多 练习 3:Bash:Shell..profile..bashrc..bash_history ...
- git reset HEAD 与 git reset --hard HEAD的区别
感谢原文作者:天地逍遥 原文链接:https://www.jianshu.com/p/aeb50b94e6c0 git reset HEAD 是将咱暂存区和HEAD的提交保持一致 git reset ...
- java命令- (学习)jps
jps(Java Virtual Machine Process Status Tool) 是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前jav ...
- vue3 最长递增子序列 diff优化
//vue3优化版(回头我会完善下算法思路) function getSequence(arr) { const p = arr.slice() const result = [0] let i, j ...