我正在尝试将一些属性注入(inject)父类和子类中,但我遇到了一些问题。我想从子进程中访问注入(inject)的 commonAddress 属性,但同时我想在子进程中注入(inject)相对路径。
父类:
public class Parent {
private String commonAddress;
public void setCommonAddress(String commonAddress) {
this.commonAddress = commonAddress;
}
}
子类:
public class Child1 extends Parent {
private String relativePath;
public void setRelativePath(String relativePath) {
this.relativePath = relativePath;
}
}
src/main/resources 中的 applicationContext.xml:
<bean id="parentBean" class="package.Parent">
<property name="commonAddress" ref="commonAddressString"/>
</bean>
<bean id="childBean" class="package.Child1">
<property name="relativePath" ref="relativePathString"/>
</bean>
src/test/resources 中的 testApplicationContext.xml:
<bean id="commonAddressString" class="java.lang.String">
<constructor-arg>
<value>CommonAddressValue</value>
</constructor-arg>
</bean>
<bean id="relativePathString" class="java.lang.String">
<constructor-arg>
<value>RelativePathValue</value>
</constructor-arg>
</bean>
测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/applicationContext.xml" })
public class TestParent {
private Parent parent;
public void setParent(Parent parent) {
this.parent = parent;
}
@Test
public void testParentInjectionInTestClass(){
Assert.assertNotNull(parent);
}
}
如果我使用 @Autowired 注释 TestParent 的父属性,则会出现问题,因为有 2 个 bean 符合父类型的条件。
如果我在applicationContext.xml中显式声明测试bean,则断言失败,因此注入(inject)不成功。
<bean id="testParent" class="package.TestParent">
<property name="parent" ref="parentBean"></property>
</bean>
最佳答案
我正在使用没有注释的直接 XML Spring 配置。在你的情况下,我只是指定按名称 Autowiring 。我相信通过注释,您可以使用 @Qualifier 实现相同的效果(按名称而不是按类型连接)。
关于java - 继承树的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6945717/