public class A {
String a;
String b;
//a和b的get,set方法
.....
}
public class B extends A{
String c;
String fn(){
return a+b+c;
}
}
现在在a.xml中配置好A,并注入属性 a和b
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="bean1" class="A">
<property name="a">
<value>1</value>
</property>
<property name="b">
<value>2</value>
</property>
</bean>
</beans>
在b.xml中配置B
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="bean2" class="B">
<property name="c">
<value>3</value>
</property>
</bean>
</beans>
现在,Spring初始化a.xml,b.xml。获取Bean B后,调用其b.f()方法却输出“3”,可是我希望它输出“123”,因为我需要B的父类即A的依赖自动传递给B,那么我该如何配置?(a.xml和b.xml不能合并)
如果用parent的话是可以解决,但我看有个项目例子不用parent,不知道是什么原因?请知道的回答一下,谢谢。
5 个解决方案
#1
再设置一个parent.xml
<beans>
<bean id="abstractbean" abstract=true>
<property name="a">
<value>1 </value>
</property>
<property name="b">
<value>2 </value>
</property>
</bean>
</beans>
a.xml
<beans>
<bean id="abstractbean" class="B" parent="abstractbean">
</beans>
b.xml
<beans>
<bean id="abstractbean" class="A" parent="abstractbean"/>
<property name="c">
<value>3 </value>
</property>
</bean>
</beans>
<beans>
<bean id="abstractbean" abstract=true>
<property name="a">
<value>1 </value>
</property>
<property name="b">
<value>2 </value>
</property>
</bean>
</beans>
a.xml
<beans>
<bean id="abstractbean" class="B" parent="abstractbean">
</beans>
b.xml
<beans>
<bean id="abstractbean" class="A" parent="abstractbean"/>
<property name="c">
<value>3 </value>
</property>
</bean>
</beans>
#2
a.xml和b.xml中class属性弄反了~~~
#3
用parent就是再注入一次,等同于下面的代码,不用parent的话可以实现嘛?关注
<bean id="bean2" class="B">
<property name="a">
<value>1</value>
</property>
<property name="b">
<value>2</value>
</property>
<property name="c">
<value>3</value>
</property>
</bean>
<bean id="bean2" class="B">
<property name="a">
<value>1</value>
</property>
<property name="b">
<value>2</value>
</property>
<property name="c">
<value>3</value>
</property>
</bean>
#4
<beans>
<bean id="spot.spotDao" class="com.danlong.spot.dao.impl.SpotDaoImpl" parent="daoTemplate"></bean>
<bean id="spot.spotManager" parent="txProxyTemplate">
<property name="proxyInterfaces">
<list>
<value>com.danlong.spot.service.SpotManager</value>
</list>
</property>
<property name="target">
<ref bean="spot.spotManagerImpl"/>
</property>
</bean>
<bean id="spot.spotManagerImpl"
class="com.danlong.spot.service.impl.SpotManangerImpl" parent="com.danlong.common.service.imp.BaseManager">
<property name="spotDao">
<ref bean="spot.spotDao"/>
</property>
</bean>
</beans>
如同上面的配置,SpotManangerImpl已经继承了BaseManager,如果不用parent的话,BaseManager属性的依赖注入就实现不了,报空指针。难道一定要用parent吗?
#5
如果不是parent的话,只能在子类将父类再注入一遍,其实parent也就是干了这个操作,等高手来给出不同的方案,持续关注中,而且如果父类的代码不可见的话,就好象只能这样注入,无法写annoation注入
#1
再设置一个parent.xml
<beans>
<bean id="abstractbean" abstract=true>
<property name="a">
<value>1 </value>
</property>
<property name="b">
<value>2 </value>
</property>
</bean>
</beans>
a.xml
<beans>
<bean id="abstractbean" class="B" parent="abstractbean">
</beans>
b.xml
<beans>
<bean id="abstractbean" class="A" parent="abstractbean"/>
<property name="c">
<value>3 </value>
</property>
</bean>
</beans>
<beans>
<bean id="abstractbean" abstract=true>
<property name="a">
<value>1 </value>
</property>
<property name="b">
<value>2 </value>
</property>
</bean>
</beans>
a.xml
<beans>
<bean id="abstractbean" class="B" parent="abstractbean">
</beans>
b.xml
<beans>
<bean id="abstractbean" class="A" parent="abstractbean"/>
<property name="c">
<value>3 </value>
</property>
</bean>
</beans>
#2
a.xml和b.xml中class属性弄反了~~~
#3
用parent就是再注入一次,等同于下面的代码,不用parent的话可以实现嘛?关注
<bean id="bean2" class="B">
<property name="a">
<value>1</value>
</property>
<property name="b">
<value>2</value>
</property>
<property name="c">
<value>3</value>
</property>
</bean>
<bean id="bean2" class="B">
<property name="a">
<value>1</value>
</property>
<property name="b">
<value>2</value>
</property>
<property name="c">
<value>3</value>
</property>
</bean>
#4
<beans>
<bean id="spot.spotDao" class="com.danlong.spot.dao.impl.SpotDaoImpl" parent="daoTemplate"></bean>
<bean id="spot.spotManager" parent="txProxyTemplate">
<property name="proxyInterfaces">
<list>
<value>com.danlong.spot.service.SpotManager</value>
</list>
</property>
<property name="target">
<ref bean="spot.spotManagerImpl"/>
</property>
</bean>
<bean id="spot.spotManagerImpl"
class="com.danlong.spot.service.impl.SpotManangerImpl" parent="com.danlong.common.service.imp.BaseManager">
<property name="spotDao">
<ref bean="spot.spotDao"/>
</property>
</bean>
</beans>
如同上面的配置,SpotManangerImpl已经继承了BaseManager,如果不用parent的话,BaseManager属性的依赖注入就实现不了,报空指针。难道一定要用parent吗?
#5
如果不是parent的话,只能在子类将父类再注入一遍,其实parent也就是干了这个操作,等高手来给出不同的方案,持续关注中,而且如果父类的代码不可见的话,就好象只能这样注入,无法写annoation注入