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 的名称。
相关推荐
spring 3.2.5版本源码使用的,构建的时候使用如下描述 因为英文不太好,大概意思可能是什么asm4.0版本使用的spring 在spring4中已经重新包装了asm在spring-core的核心包里,当然我这解释不标准 看下满原文构建的描述...
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....
Using depends-on ............................................................................................ 47 Lazy-initialized beans ...................................................................
Using depends-on ............................................................................................ 47 Lazy-initialized beans ...................................................................
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 ...
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框架中bean标签parent属性的各类使用范例 总计12个范例,涵盖了class、init-method、 factory-method、lazy-init、 depends-on、autowire 多种属性的组合使用
4.依赖(Dependson) 使用depends-on元素定义对象初始化顺序。 5. Bean范围(beanscope) 范围 描述 单身人士 这会将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 两者都...
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. 其他作用域 ...
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...
但是我们的MainApp似乎并没有从接口抽象中得到什么好处,从图中看,MainApp居然依赖于三个组件:ICommon.dll、 HelloGenerator.dll以及SayHello.dll。这是由于MainApp在这里负责整体的“装配”工作。如果这三个组件...
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. 其他作用域 ...
容器中实现懒加载.dependsOn属性;depends-on 在正式的程序开始之前,要预先加载一部分内容.依赖注入三种方式【手动装配-非注解方式】;构造函数注入 index:可省略,参数下标,默认从0开始 name :可省略,...
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笔记-在Spring配置文件中,通过parent属性和depends-on属性来实现依赖、继承bean的配置
depends-on="lifecycleBeanPostProcessor" /> class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <!-- end --> --修改了过滤链 <!-- 过滤链定义 --> //...
spring3.1中文参考文档,南磊翻译,现在有4章,目录如下: 第一部分 Spring framework概述.......................................................................................................................
目的-演示使用Bean注册依赖注入国际奥委会集装箱AnnotationConfigApplicationContext 注解@Bean @DependsOn @Autowired @PostConstruct @Config @SpringBootTest @Qualifier发展笔记在完成Part 0.0之前,请勿克隆此...
depends-on="lifecycleBeanPostProcessor"> <property name="proxyTargetClass" value="true" /> </bean> <bean class="org.apache.shiro.spring.security.interceptor....