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的核心包里,当然我这解释不标准 看下满原文构建的描述...
##### 为什么选择 Spring Dynamic Modules? - **统一的开发模型**:Spring DM 提供了一种统一的方式来管理和配置 OSGi 环境中的组件。 - **灵活的应用程序部署**:它支持多种部署选项,使得应用程序可以在不同的...
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....
- **1.4.3 使用`depends-on`**: 可以通过`depends-on`属性指定当前Bean依赖于其他Bean,确保依赖的Bean先被创建。 - **1.4.4 惰性初始化Bean**: 通过设置`lazy-init`属性为`true`,可以让Spring容器延迟创建Bean,...
Spring允许自定义作用域,开发者可以创建自己的作用域以及在自定义作用域中使用Bean。 1.6 自定义Bean的性质 Spring允许自定义Bean的生命周期回调、依赖以及作用域等。 1.6.1 生命周期回调 Spring管理Bean的生命...
Spring 中的 DependsOn 注解可以保证被依赖的 bean 先于当前 bean 被容器创建。例如,在 B 上加上注解 @DependsOn({"a"}),这样可以保证 A 先于 B 被初始化。 需要注意的是,bean 属性的注入是在初始化方法调用之前...
如`Configuration`、`Definition`、`DependsOn`、`Import`、`ImportResource`、`Lazy`和`Scope`属性,它们分别用于标记配置类、定义bean、指定依赖关系、导入其他配置、延迟加载和设置作用域等。 ### 示例应用程序 ...
- **Using depends-on**: 使用`depends-on`属性来指定Bean之间的依赖顺序。 - **Lazily-instantiated beans**: 延迟加载Bean,直到第一次请求时才初始化。 - **Autowiring collaborators**: 自动装配协作对象,简化...
- **depends-on属性**:确保某些Bean先于其他Bean初始化。 - **别名(Alias)**:创建Bean的别名,便于引用。 - **工厂Bean和工厂方法**:介绍如何使用工厂模式创建Bean。 - **命名空间**:简化属性注入的配置方式。 -...
- 介绍了如何管理和配置Spring应用程序中的依赖关系,以及推荐的命名约定。 - **1.2.3.2 Logging 日志** - 描述了如何配置和使用日志框架与Spring一起工作。 #### 二、核心技术 ##### 3.1 Spring IoC容器和bean...
Using depends-on ............................................................................................ 47 Lazy-initialized beans ...................................................................
Spring框架允许通过`depends-on`属性来指定一个Bean依赖于另一个Bean。这意味着,在创建依赖的Bean之前,必须先创建被依赖的Bean。 ##### 3.3.5 自动装配协作者 自动装配是一种方便的特性,允许Spring自动为Bean...
- 本章节进一步介绍了Spring 3.1版本中的新特性,包括但不限于对已有特性的优化和新增功能。 #### 第三部分:核心技术 ##### 第4章:IoC容器 **4.1 Spring IoC容器和bean的介绍** - 介绍了IoC容器的基本概念,...
单例作用域是最常用的作用域之一,意味着在Spring IoC容器中只存在一个Bean实例。 - **1.5.2 原型作用域** 原型作用域意味着每次请求都会创建一个新的Bean实例。 - **1.5.3 单例Bean与原型Bean的依赖** 当...
Using depends-on ............................................................................................ 47 Lazy-initialized beans ...................................................................