Spring Bean配置继承
问题描述---为什么Bean配置需要能够继承?在Spring Ico容器里配置Bean时,可能存在这样一种情况:多个Bean的配置有一部分是相同的,如果在每个Bean里都进行配置,就会显得很麻烦。相同的配置往往有两种情况:1.多个Bean需要注入相同的Bean;2.多个元素的属性相同。解决方案将多个Bean相同的部分抽象为一个Bean,然后让这多个Bean继承它。实现案例
·
问题描述---为什么Bean配置需要能够继承?
在Spring Ico容器里配置Bean时,可能存在这样一种情况:多个Bean的配置有一部分是相同的,如果在每个Bean里都进行配置,就会显得很麻烦。
相同的配置往往有两种情况:1.多个Bean需要注入相同的Bean;2.多个<bean>元素的属性相同。
解决方案
将多个Bean相同的部分抽象为一个Bean,然后让这多个Bean继承它。
实现案例
class Dao{
public void daoM(){
System.out.println("doaM");
}
}
class ServiceA {
private Dao dao;
public void setDao(Dao dao) {
this.dao = dao;
}
public void serviceA_M(){
dao.daoM();
}
}
class ServiceB {
private Dao dao;
public void setDao(Dao dao) {
this.dao = dao;
}
public void serviceB_M(){
dao.daoM();
}
}
Bean配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dao" class="com.zzj.test.Dao"></bean>
<bean id="service" abstract="true">
<property name="dao">
<ref bean="dao"/>
</property>
</bean>
<bean id="serviceA" class="com.zzj.test.ServiceA" parent="service"></bean>
<bean id="serviceB" class="com.zzj.test.ServiceB" parent="service"></bean>
</beans>
注:抽象出来的bean并未指定class。
测试
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ServiceA serviceA = (ServiceA) context.getBean("serviceA");
serviceA.serviceA_M();
ServiceB serviceB = (ServiceB) context.getBean("serviceB");
serviceB.serviceB_M();
}
总结
父Bean可以作为配置模板,也可以作为Bean实例。不过,如果只想把父Bean作为不实例化的模板,那么必须把abstract属性设为true,这样spring将不会实例化这个Bean。
注意:
1.并不是所有在父<bean>元素里定义的属性都会被继承。例如,autowire和dependency-check属性就不能被继承。
2.Bean配置的继承不是类的继承,它们之间没有任何关系。
更多推荐
已为社区贡献3条内容
所有评论(0)