Spring <bean> 之间的关系&整合多个配置文件
2020-12-13 03:19
标签:默认值 系统 红旗 多个 设置 数值 功能 保存 外部 Spring 不但可以通过 引用另一个 Bean,建立起 Bean 和 Bean 之间的依赖关系, 1.继承 OOP思想告诉我们,如果多个类拥有相同的方法和属性,则可以引入一个父类,在父类中定义这些类共同的方法和属性,以消除重复的代码。同样,如果多个 下面通过一个实例,对使用和未使用父子 未使用父子 上面代码配置了两个 car Bean,我们发现这两个 Bean 的配置存在大量的重复信息。事实上,二者除了 color 属性配置值不一样外,其他配置信息都相同。通过父子 使用父子 car3 和 car4 这两个 父 2.依赖 但在某些情况下,这种 Bean 之间的依赖关系并不那么明显。下面举一个例子。“小春论坛”拥有很多系统参数(如会话过期时间、缓存更新时间等),这些系统参数用于控制系统的运行逻辑。我们用一个 SystemSettings 类表示这些系统参数。 在 SystemSettings 类中为每个系统参数提供了默认值,但一个灵活的论坛必须提供一个管理后台,在管理后台中可以调整这些系统参数并保存到后台数据库中,在系统启动时,初始化程序从数据库后台加载这些系统参数的配置值以覆盖默认值。 假设论坛有一个缓存刷新管理器,它需要根据系统参数 SystemSettings.REFRESH CYCLE创建缓存刷新定时任务。 在以上实例中,CacheManager 依赖于 SystemSettings,而 SystemSettings 的值由 Syslnit 负责初始化。虽然 CacheManager 不直接依赖于 Syslnit,但从逻辑上看,CacheManager 希望在 Syslnit 加载并完成系统参数设置后再启动,以避免调用不到真实的系统参数值。如果这3个 Bean 都在 Spring 配置文件中定义,那么如何保证 Syslnit 在 CacheManager 之前进行初始化呢? Spring 允许用户通过 depends-on 属性显式指定 Bean 前置依赖的 Bean,前置依赖的 Bean 会在本 Bean 实例化之前创建好。 通过 depends-on 属性将 syslnit 指定为 manager 前置依赖的 Bean,这样就可以保证 managerBean 在实例化并运行时所引用的系统参数是最新的设置值,而非 SystemSettings 类中的默认值。如果前置依赖于多个 Bean,则可以通过逗号、空格或分号的方式创建 Bean 的名称。 3.引用 假设一个 假设希望将 boss Bean 的 carld 设置为①处 Spring 为此提供了一个 假设②处由于配置错误,误将 如果引用者和被引用者的 整合多个配置文件 对于一个大型应用来说,可能存在多个 XML 配置文件,在启动 Spring 容器时,可以通过一个 String 数组指定这些配置文件。Spring 还允许通过 假设已经在 beans1.xml 中配置了 car1 和 car2 的 Bean,在①处通过 需要指出的是,如果一个配置文件 a.xml 定义的 一个 XML 配置文件可以通过 标签:默认值 系统 红旗 多个 设置 数值 功能 保存 外部 原文地址:https://www.cnblogs.com/jwen1994/p/11062209.htmlbean id="car1" class="com.smart.tagdepend.Car"
p:brand="红旗CA72" p:price="2000.00" p:color="黑色" />
bean id="car2" class="com.smart.tagdepend.Car"
p:brand="红旗CA72" p:price="2000.00" p:color="红色" />
bean id="abstractCar" class="com.smart.tagdepend.Car"
p:brand="红旗CA72" p:price="2000.00" p:color="黑色" abstract="true"/>
bean id="car3" parent="abstractCar">
property name="color" value="红色"/>
bean>
bean id="car4" parent="abstractCar" >
property name="color" value="白色"/>
bean>
一般情况下,可以使用 元素标签建立对其他 Bean 的依赖关系,Spring 负责管理这些 Bean 的关系。当实例化一个 Bean 时,Spring 保证该 Bean 所依赖的其他 Bean 已经初始化。public class SystemSettings {
public static int SESSION_TIMEOUT = 30;
public static int REFRESH_CYCLE = 60;
}
public class SysInit {
public SysInit(){
System.out.println("SysInit");
//模拟从数据库中加载系统设置信息
SystemSettings.REFRESH_CYCLE = 100;
SystemSettings.SESSION_TIMEOUT = 10;
}
}
public class CacheManager {
public CacheManager(){
Timer timer = new Timer();
TimerTask cacheTask = new CacheTask();
timer.schedule(cacheTask,0,SystemSettings.REFRESH_CYCLE*1000);
}
}
bean id="cacheManager" class="com.smart.tagdepend.CacheManager" depends-on="sysInit" />
bean id="sysInit" class="com.smart.tagdepend.SysInit" />
bean id="car" class="com.smart.tagdepend.Car"/> ①
bean id="boss" class="com.smart.tagdepend.Boss" > ②
property name="carId" >
value>carvalue>
property>
bean>
bean id="car" class="com.smart.tagdepend.Car"/> ①
bean id="boss" class="com.smart.tagdepend.Boss" > ②
idref bean="car"/>
property>
bean>
import resource="classpath:com/smart/impt/beans1.xml"/> ①
bean id="boss1" class="com.smart.fb.Boss" p:name="John" p:car-ref="car1"/>
bean id="boss2" class="com.smart.fb.Boss" p:name="John" p:car-ref="car2"/>
文章标题:Spring <bean> 之间的关系&整合多个配置文件
文章链接:http://soscw.com/essay/27388.html