java - 继承树的依赖注入(inject)

标签 java spring dependency-injection

我正在尝试将一些属性注入(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/

相关文章:

java - 使用 Java exec 的额外 psql 命令行参数

java - 无法将自定义类型作为 json 字符串存储到数据库中 - java.lang.IllegalArgumentException : Can not set final field to java. util.LinkedHashMap

android - 如何将 AndroidInjector 与子组件一起使用

c# - 注册模块 Autofac

dependency-injection - 为什么不传递你的 IoC 容器呢?

java - 无法确定 Tic Tac Toe 中的获胜条件

java - 没有 Spring 的 Spring JDBC 模板

可选的 Spring ResponseEntity

java - 在 Spring-boot 中设置默认 Activity 配置文件

java - 根据value显示hashmap的entryset