Spring学习笔记(11)——bean之间的关系

本文详细介绍了Spring中bean之间的关系,包括继承、依赖、引用等配置方式。通过父子bean实现配置信息的复用,使用depends-on指定bean的初始化顺序,以及如何通过value、ref、bean等元素设置bean的属性值。此外,还讨论了自动装配的策略,如byName、byType等,以及如何使用autowire-candidate排除特定bean的自动装配。
摘要由CSDN通过智能技术生成

1)继承:

如果多个bean存在相同的配置信息,Spring允许我们定义一个父,子将自动继承父的配置信息。

如下:

<bean class="com.baobaobao.Car" id="car1" p:color="红色"p:price="200000" p:brand="奥迪">
<bean class="com.baobaobao.Car" id="car2" p:color="白色"p:price="200000"p:brand="奥迪"></bean></bean>

 

这两个bean的配置存在大量重复信息,可以通过父子bean很好的消除这种重复配置:

<beanclass="com.baobaobao.Car"id="abstractcar"p:color="黑色"p:price="200000"p:brand="奥迪"abstract="true">
<bean id="car1"p:color="红色"parent="abstractcar">
<bean id="car2"p:color="白色"parent="abstractcar">
</bean>
</bean></bean>
 

Car1跟Car2都继承自abstractcar,Spring会将父bean的配置信息传递给子bean,如果子bean提供了父bean已有的配置信息,那么子bean的会覆盖父bean的

 

父bean的功能主要是为了简化子bean的配置,所以一般声明为abstract=“true”,表示这个不实例化为一个对应的Bean,如果用户不指定该属性为true,那么IOC容器会实例化一个名叫abstractcar的Bean。

 

2)依赖

一般情况使用即可建立一个bean对其他bean的依赖关系,Spring负责管理这些Bean的关系,当实例化一个Bean时,Spring保证该Bean所依赖的其他Bean已经初始化。

书上举了一个比较经典而特殊的例子:

例如一个系统,有一个SystemSetting类,

 
 
 
 
 
 
publicclassSystemSetting {
    publicstaticint SESSION_TIMEOUT=30;
    publicstaticint REFRESH_CYCLE=60;
    .....}

里面有一些系统参数的默认值。

而这个系统有个管理后台,可以修改这些值保存到数据库中,而有一个SysInit类,在初始化的时候从数据中拿到值,修改SystemSetting的参数

 
 
 
 
 
publicclassSysInit {
    publicSysInit(){
        SystemSetting.SESSION_TIMEOUT=100;
        SystemSetting.REFRESH_CYCLE=120;
    }
}


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

 
 
 
 
 
publicclassCacheManager {
    publicCacheManager(){
        Timer timer =newTimer();
        TimerTask cacheTask =newCacheTask();
        timer.schedule(cacheTask,0,SystemSetting.REFRESH_CYCLE);
    }
}


在上面的例子中CacheManager依赖于SystemSetting,而SystemSetting的值由SysInit负责初始化,虽然CacheManager不直接依赖于SysInit,但是,从逻辑上讲,CacheManager希望在SysInit加载并完成系统参数设置后再启动,以避免调用不到真实的参数值。如果这三个Bean都在配置中配,如何保证SysInit在CacheManager之前初始化呢

 

使用depends-on属性可以指定Bean的前置依赖Bean,前置依赖Bean会在本Bean实例化之前创建好:

 

 
 
<bean class="com.baobaobao.CacheManager"id="manager"depends-on="sysinit">
     <bean class="com.baobaobao.SysInit"id="sysinit">
</bean></bean>


这样配置就哦了,如果前置依赖于多个bean,可以通过逗号,空格,或分号分隔开来。

  

3)引用

假如一个bean要引用另一个bean的配置的id属性值,可以使用如下配置:

 

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值