Я пытаюсь внедрить некоторые свойства в родительский класс и дочерний класс, и я столкнулся с некоторыми проблемами.Я хочу получить доступ к внедренному свойству commonAddress от дочернего элемента, но в то же время хочу ввести относительный путь в дочернем элементе.
Родительский класс:
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;
}
}
applicationContext.xml из src / main / resources:
<bean id="parentBean" class="package.Parent">
<property name="commonAddress" ref="commonAddressString"/>
</bean>
<bean id="childBean" class="package.Child1">
<property name="relativePath" ref="relativePathString"/>
</bean>
testApplicationContext.xml из src / test / resources:
<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);
}
}
Если я аннотирую родительское свойство из TestParent с помощью @Autowired, возникнет проблема, поскольку есть 2 компонента, подходящие для родительского типа.
Если я явно объявлю тестовый компонент в applicationContext.xml, утверждение не будет выполнено, поэтому внедрение будет неудачным.
<bean id="testParent" class="package.TestParent">
<property name="parent" ref="parentBean"></property>
</bean>