Spring中depends-on的作用是什么?
2016-05-09 16:03
651 查看
原址:点击打开链接
spring的IOC容器负责bean的管理,当实例化一个bean是,spring保证该Bean所依赖的其他bean已经初始化。一般情况下,用<ref>元素建立对其他bean的依赖关系。
比如:
Xml代码
<bean id="a" class="com.yanln.spring.bean.A"> </bean>
<bean id="b" class="com.yanln.spring.bean.B" p:a-ref="a"> </bean>
但在某些情况下,这种bean之间的依赖关系并不那么明显。
举个例子:某个论坛系统拥有很多系统参数(如会话过期时间、缓存更新时间等),这些系统参数用于控制系统的运行逻辑。比如:
Java代码
public class SystemSettings{
//缓存更新时间
public static int REFRESH_CYCLE = 60;
......
}
在SystemSettings中为每一个系统参数提供了默认值,但对于一个灵活的论坛是需要提供一个管理后台的,在管理后台中可以调整这些系统参数并保存到后台数据库中,而在系统启动时,初始化程序从数据库后台加载这些系统参数的值来覆盖系统默认值。比如:
Java代码
public class SystemInit{
public SystemInit(){
//模拟从数据库中加载的系统参数配置值
SystemSettings.REFRESH_CYCLE=100;
......
}
}
假设论坛系统有一个缓存刷新管理器,它需要根据系统参数SystemSettings.REFRESH_CYCLE创建缓存刷新定时任务:
Java代码
public class CacheManager{
public CacheManager(){
Timer t = new Timer();
TimerTask cacheTask = new CacheTask();
//缓存刷新定时处理
t.schedule(cacheTask,0,SystemSettings.REFRESH_CYCLE);
}
......
}
在以上的实例中,CacheManager类需要用到SystemSetting类的值,而SystemSettings的值有SystemInit负责初始化,虽然CacheManager不直接依赖SystemInit,但从逻辑上看,CacheManager希望在SystemInit加载并完成系统参数设置后再启动,以获得最新的系统参数值。如果这三个bean都在spring配置文件中定义,我们如何保证SystemInit在CacheManager之前进行初始化呢?
spring允许用户通过depends-on属性指定bean前置依赖的bean,前置依赖的bean会在本bean实例化之前创建好:
Xml代码
<bean id="sysinit" class="SystemInit">
<bean id="manager" class="CacheManager" depends-on="sysinit"/>
如果前置依赖于多个 Bean,则可以通过分号,逗号或空格的方式配置 Bean 的名称。
spring的IOC容器负责bean的管理,当实例化一个bean是,spring保证该Bean所依赖的其他bean已经初始化。一般情况下,用<ref>元素建立对其他bean的依赖关系。
比如:
Xml代码
<bean id="a" class="com.yanln.spring.bean.A"> </bean>
<bean id="b" class="com.yanln.spring.bean.B" p:a-ref="a"> </bean>
但在某些情况下,这种bean之间的依赖关系并不那么明显。
举个例子:某个论坛系统拥有很多系统参数(如会话过期时间、缓存更新时间等),这些系统参数用于控制系统的运行逻辑。比如:
Java代码
public class SystemSettings{
//缓存更新时间
public static int REFRESH_CYCLE = 60;
......
}
在SystemSettings中为每一个系统参数提供了默认值,但对于一个灵活的论坛是需要提供一个管理后台的,在管理后台中可以调整这些系统参数并保存到后台数据库中,而在系统启动时,初始化程序从数据库后台加载这些系统参数的值来覆盖系统默认值。比如:
Java代码
public class SystemInit{
public SystemInit(){
//模拟从数据库中加载的系统参数配置值
SystemSettings.REFRESH_CYCLE=100;
......
}
}
假设论坛系统有一个缓存刷新管理器,它需要根据系统参数SystemSettings.REFRESH_CYCLE创建缓存刷新定时任务:
Java代码
public class CacheManager{
public CacheManager(){
Timer t = new Timer();
TimerTask cacheTask = new CacheTask();
//缓存刷新定时处理
t.schedule(cacheTask,0,SystemSettings.REFRESH_CYCLE);
}
......
}
在以上的实例中,CacheManager类需要用到SystemSetting类的值,而SystemSettings的值有SystemInit负责初始化,虽然CacheManager不直接依赖SystemInit,但从逻辑上看,CacheManager希望在SystemInit加载并完成系统参数设置后再启动,以获得最新的系统参数值。如果这三个bean都在spring配置文件中定义,我们如何保证SystemInit在CacheManager之前进行初始化呢?
spring允许用户通过depends-on属性指定bean前置依赖的bean,前置依赖的bean会在本bean实例化之前创建好:
Xml代码
<bean id="sysinit" class="SystemInit">
<bean id="manager" class="CacheManager" depends-on="sysinit"/>
如果前置依赖于多个 Bean,则可以通过分号,逗号或空格的方式配置 Bean 的名称。
相关文章推荐
- 深入Java集合学习系列:ArrayList的实现原理
- SpringMVC接收checkbox传值
- spring整合消息队列rabbitmq
- 在Eclipse中导入android项目,默认以Google API运行的解决办法
- java 用两个栈实现队列
- (2.1.19.5)深入理解Java:注解(Annotation)--注解处理器
- java验证码组件Jcaptcha
- SpringMVC简介与配置
- java web 生成图片验证码的功能实现
- java反射详解
- 使用Eclipse构建Maven项目(step-by-step)
- 跟我学分布式-Dubbo整合spring
- RxJava----操作符:cold&hot Observable
- 不惑JAVA之JAVA基础 - ThreadLocal
- Java中Synchronized的使用方法
- Java 内部类的一些总结
- Java:在类中定义接口有什么用处?
- Java JNI_OnLoad的妙用
- java之接口
- 无法打开eclipse,显示eclipse was started but error code=13