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 运行 ...
随机推荐
- ElementUI常遇到的一些问题
一.form 下面只有一个 input 时回车键刷新页面 原因是:触发了表单默认的提交行为,给el-form 加上 @submit.native.prevent 就行了. <el-form in ...
- 带你十天轻松搞定 Go 微服务系列(八、服务监控)
序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证 ...
- python 单元测试 执行测试
1.在unittest框架中执行测试用例: if __name__ == "__main__": unittest.main() # unittest框架会把以test_开头的实例 ...
- Python3.7.3 + pycharm安装
Python3.7.3下载地址: https://www.python.org/ https://www.python.org/getit/ Pycharm: http://www.jetbrains ...
- 微服务中的CAP原则
CAP原则:指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三个要素最多同时实现两点不可能同时实 ...
- Maven多环境配置实战 filter
目前在开发一个wap项目,主要有开发.测试和最终部署上线几个阶段,每个阶段对配置(数据库.日志)都有不同的设置.以前都是以开发环境为主,在测试和部署上线时由部署工程师负责修改配置并上线.但是公司并非都 ...
- shell脚本一键部署——Redis(直接复制执行)亲测100% 有效
首先所需软件包拖进目录,然后编辑一个脚本,复制一下脚本,source执行一下即可 #!/bin/bash echo -e "\033[31m =====正在验证当前为仅主机还是NAT模式== ...
- CSS多种方式实现元素水平垂直居中
html结构: <div class="center">确定宽高水平垂直居中</div> <div class="center2" ...
- linux_19
haproxy https实现 总结tomcat的核心组件以及根目录结构 tomcat实现多虚拟主机 nginx实现后端tomcat的负载均衡调度 简述memcached的工作原理
- 他人学习Python感悟
作者:王一 链接:https://www.zhihu.com/question/26235428/answer/36568428 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...