Spring中的ref和depends-on区别
参考:http://yanln.iteye.com/blog/2210723
这两者都是表示对其他bean的依赖,但是ref常用的情况是这个bean作为当前bean的属性,比如:
<bean id="a" class="ClassA"/>
<bean id="b" class="ClassB">
<property name="aref" ref="a" />
</bean>
这是很强的一个依赖关系了,但是有时候依赖关系并不会这么明显,我们依赖的bean也许并不是我们当前bean的属性,比如当前bean B,我们需要初始化一些值,这些值的初始化是依赖于bean A的,那么我们的bean B肯定是依赖于A的,但是A并不是B的什么,这个时候用ref肯定是不合适的,就可以用depends-on
举个例子:某个论坛拥有很多系统参数:
public class SystemSettings{
//缓存更新时间
public static int REFRESH_CYCLE = 60;
......
}
现在我们这些参数不再是写死的,需要在后台对这些参数进行管理:管理员可以对这些参数进行更改,并且会存储入库,系统启动的时候,会从数据库加载这些参数,假设加载参数的类是SystemInit
public class SystemInit{
public SystemInit(){
//模拟从数据库中加载的系统参数配置值
SystemSettings.REFRESH_CYCLE=100;
......
}
}
我们的系统现在有一个定时配置刷新器,用于定时刷新这些配置:
public class CacheManager{
public CacheManager(){
Timer t = new Timer();
TimerTask cacheTask = new CacheTask();
//缓存刷新定时处理
t.schedule(cacheTask,0,SystemSettings.REFRESH_CYCLE);
}
......
}
在这个例子中,我们的CacheManager如果想要获取最新配置,必须用到SystemSettings的值,而这个值需要用到我们的Bean SystemInit,SystemInit并不属于我们的CacheManager的属性或者其他的什么。但是逻辑上SystemInit是要先于CacheManager加载的,这个时候就可以用dependds-on了:
<bean id="sysinit" class="SystemInit">
<bean id="manager" class="CacheManager" depends-on="sysinit"/>
除此之外,使用了depends-on的时候,依赖他人的bean是先于被依赖bean销毁的
总结:depends-on适用于表面上看起来两个bean之间没有使用属性之类的强连接的bean,但是两个bean又确实存在前后依赖关系的情况,使用了depends-on的时候,依赖他人的bean是先于被依赖bean销毁的
————————————————
版权声明:本文为CSDN博主「soputasmile11」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014473112/article/details/80662728
Spring中的ref和depends-on区别相关推荐
- C#中关键字ref与out的区别(转)
C#中关键字ref与out的区别(转) 在C#中,ref与out是很特殊的两个关键字.使用它们,可以使参数按照引用来传递. 总的来说,通常我们向方法中传递的是值.方法获得的是这些值的一个拷贝,然后使用 ...
- spring 中scope的singleton和prototype区别
<bean id="meetAction" class="com.web.actions.MeetsAction" scope="proto ...
- Spring中@NotEmpty、@NotBlank、@NotNull 区别和使用
1:引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>sp ...
- Spring中@Controller和@RestController之间的区别
1. Controller, RestController的共同点 都是用来表示Spring某个类的是否可以接收HTTP请求 2. Controller, RestController的不同点 @C ...
- Spring中使用id和name的区别。
使用id时 <bean id="USE01Blogic" class="com.sxzlc.co.USE.USEO1Blogic"> id在项目中唯 ...
- Spring中@within与@target的区别
区别 @within:定义在哪里,就作用在哪里.(有点静态编译的味道) @target:运行在哪里,就作用在哪里.(类比动态执行的感觉)@within,如果子类没有重写,在某个类上加一个注解,就会默认 ...
- Spring中ref local与ref bean区别
为什么80%的码农都做不了架构师?>>> Spring中ref local与ref bean区别 今天在做SSH框架Demo实例时,在ApplicationResources. ...
- (转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: & ...
- Spring中SmartLifecycle和Lifecycle的作用和区别
欢迎关注方志朋的博客,回复"666"获面试宝典 本文基于SpringBoot 2.5.0-M2讲解Spring中Lifecycle和SmartLifecycle的作用和区别,以及如 ...
- java悲观者不加事务_在spring中,使用事务和不用事务的区别
各位高手大家好,我最近在学习Spring,自己也作了几个例子.但我在开发的过程中发现我使用事务和不使用事务效果都一样,我想问一下两者的区别,谢谢大家:第一种,不使用事务,Spring... 各位高手大 ...
最新文章
- 给力的 Google HTML5 训练营(HTML5 DragDrop 拖拽、FileRea...
- sae上部署第一个站
- antd 能自适应吗_Antd表格滚动 宽度自适应 不换行的实例
- 《英雄联盟》出现大面积闪退;两名 95 后大学生用脑电波写“福”字;Windows蓝屏为什么是蓝底白字? | 极客头条...
- 从程序设计、tqdm到lambda:python的“奇技淫巧”,让实现效率翻倍【科学计算类】
- C# WinForm DataGridView 给标题列增加序号及格式化某个字段
- 单元素的枚举类型已经成为实现Singleton的最佳方法
- STM32 USB Host 鼠标和键盘驱动 -- 原创
- 专业学习与职业发展之我见
- 美通企业日报 | 阿里收购网易考拉入股网易云音乐;宁德时代与博世达成战略合作...
- python连通区域计算长度_连通区域算法小结
- POJ1753题解(枚举)
- 加速及控制精灵移动,加速计值的处理
- 婚姻介绍所怎么做身份实名认证?
- 宽依赖和窄依赖_Spark RDD中的依赖关系:宽依赖和窄依赖narrow/widedependency
- 《高效学习法》思维导图——Jan
- 【转】公司版本控制管理解决方案
- 天猫用户重复购买预测之数据分析
- linux 解压命令不提示信息,技术编辑研习linux解压命令【解决措施】
- R12.2.0 post install checks error : RW-50016: Error: - {0} was not created - 1