`

Spring中depends-on的作用是什么?

阅读更多

spring的IOC容器负责bean的管理,当实例化一个bean是,spring保证该Bean所依赖的其他bean已经初始化。一般情况下,用<ref>元素建立对其他bean的依赖关系。

比如:

 

<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之间的依赖关系并不那么明显。

举个例子:某个论坛系统拥有很多系统参数(如会话过期时间、缓存更新时间等),这些系统参数用于控制系统的运行逻辑。比如:

 

public class SystemSettings{
           //缓存更新时间
           public static int REFRESH_CYCLE = 60;
           ......
}

 

SystemSettings中为每一个系统参数提供了默认值,但对于一个灵活的论坛是需要提供一个管理后台的,在管理后台中可以调整这些系统参数并保存到后台数据库中,而在系统启动时,初始化程序从数据库后台加载这些系统参数的值来覆盖系统默认值。比如:

 

 

public class SystemInit{
          public SystemInit(){
                     //模拟从数据库中加载的系统参数配置值
                     SystemSettings.REFRESH_CYCLE=100;
                     ......
          }
}

 

假设论坛系统有一个缓存刷新管理器,它需要根据系统参数SystemSettings.REFRESH_CYCLE创建缓存刷新定时任务:

 

 

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实例化之前创建好:

 

<bean id="sysinit" class="SystemInit">

<bean id="manager" class="CacheManager"  depends-on="sysinit"/>

 

如果前置依赖于多个 Bean,则可以通过分号,逗号或空格的方式配置 Bean 的名称。

1
0
分享到:
评论
1 楼 h702109382 2017-09-17  
讲得很清楚

相关推荐

    spring-asm-repack-4.0.jar

    spring 3.2.5版本源码使用的,构建的时候使用如下描述 因为英文不太好,大概意思可能是什么asm4.0版本使用的spring 在spring4中已经重新包装了asm在spring-core的核心包里,当然我这解释不标准 看下满原文构建的描述...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.4. 使用depends-on 3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.6.1. 设置Bean使自动装配失效 3.3.7. 依赖检查 3.3.8. 方法注入 3.3.8.1. Lookup方法注入 3.3.8.2. 自定义方法的替代方案 3.4....

    spring-framework-reference-4.1.2

    Using depends-on ............................................................................................ 47 Lazy-initialized beans ...................................................................

    spring-framework-reference4.1.4

    Using depends-on ............................................................................................ 47 Lazy-initialized beans ...................................................................

    Spring中文帮助文档

    3.3.3. 使用depends-on 3.3.4. 延迟初始化bean 3.3.5. 自动装配(autowire)协作者 3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. Singleton ...

    spring.net中文手册在线版

    4.3.7.使用depends-on 4.3.8.自动装配协作对象 4.3.9.检查依赖项 4.4.类型转换 4.4.1.枚举类型的转换 4.4.2.内置的类型转换器 4.4.3.自定义类型转换器 4.4.3.1.使用CustomConverterConfigurer类 4.5.自定义对象的...

    spring 的parent属性示例

    spring框架中bean标签parent属性的各类使用范例 总计12个范例,涵盖了class、init-method、 factory-method、lazy-init、 depends-on、autowire 多种属性的组合使用

    spring-training:Spring Framework简介和示例

    4.依赖(Dependson) 使用depends-on元素定义对象初始化顺序。 5. Bean范围(beanscope) 范围 描述 单身人士 这会将bean定义的范围限定为每个Spring IoC容器一个实例(默认)。 原型 这将单个bean定义的范围限定...

    Spring IOC Bean标签属性介绍(教学视频+源代码)

    1.8 depends-on 1.8.0 实体类JavaBean 1.8.0.1 Student类 1.8.1 配置文件都不加lazy-init=true 1.8.2 被依赖者(Student)加了lazy-init="true" 1.8.3 依赖者(依赖其它类)(User)加了lazy-init="true" 1.8.4 两者都...

    spring chm文档

    3.3.4. 使用depends-on 3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. 其他作用域 ...

    Spring 3 Reference中文

    4.4.3 使用depends-on 54 4.4.4 延迟初始化bean . 55 4.4.5 自动装配协作者.. 55 4.4.5.1 自动装配的限制和缺点.. 56 4.4.5.2 从自动装配中排除bean. 57 4.4.6 方法注入. 57 4.4.6.1...

    Spring.net框架

    但是我们的MainApp似乎并没有从接口抽象中得到什么好处,从图中看,MainApp居然依赖于三个组件:ICommon.dll、 HelloGenerator.dll以及SayHello.dll。这是由于MainApp在这里负责整体的“装配”工作。如果这三个组件...

    Spring 2.0 开发参考手册

    3.3.4. 使用depends-on 3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. 其他作用域 ...

    spring框架技术+第2天+xmind思维导图

    容器中实现懒加载.dependsOn属性;depends-on 在正式的程序开始之前,要预先加载一部分内容.依赖注入三种方式【手动装配-非注解方式】;构造函数注入 index:可省略,参数下标,默认从0开始 name :可省略,...

    Spring API

    3.3.3. 使用depends-on 3.3.4. 延迟初始化bean 3.3.5. 自动装配(autowire)协作者 3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. Singleton ...

    SSH笔记-依赖、继承bean的配置

    SSH笔记-在Spring配置文件中,通过parent属性和depends-on属性来实现依赖、继承bean的配置

    SpringShiro分布式缓存版

    depends-on="lifecycleBeanPostProcessor" /&gt; class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"&gt; &lt;!-- end --&gt; --修改了过滤链 &lt;!-- 过滤链定义 --&gt; //...

    spring3.1中文参考文档

    spring3.1中文参考文档,南磊翻译,现在有4章,目录如下: 第一部分 Spring framework概述.......................................................................................................................

    Maven.Spring-BeansLearnerLab

    目的-演示使用Bean注册依赖注入国际奥委会集装箱AnnotationConfigApplicationContext 注解@Bean @DependsOn @Autowired @PostConstruct @Config @SpringBootTest @Qualifier发展笔记在完成Part 0.0之前,请勿克隆此...

    shiro入门学习demo源码

    depends-on="lifecycleBeanPostProcessor"&gt; &lt;property name="proxyTargetClass" value="true" /&gt; &lt;/bean&gt; &lt;bean class="org.apache.shiro.spring.security.interceptor....

Global site tag (gtag.js) - Google Analytics