如何让Spring在属性引用中选择一个子类?

时间:2016-11-18 20:53:42

标签: java spring dependency-injection inversion-of-control

我试图在Spring Web应用程序中使用专门的子类进行测试。

应用程序上下文xml文件通过完全限定的类名引用几个bean属性中的类,如下所示:

<bean id="blahblah" class="x.y.z.Blah">
   <property name="myFooAttribute" ref="x.y.z.Foo"/>
</bean>

我想在所使用的任何地方实例化并使用x.y.z.Bar代替x.y.z.Foo

在我的测试中,我正在使用基于Java的配置并导入XML配置(遗留的东西,我真的不想太乱),因为当我将要感觉更自然时修补内容并使用内联声明的模拟。

@Configuration
@ImportResource({
        "classpath:applicationContext-common.xml",
        "classpath:app-servlet.xml"
})
static class TestConfig {
    static class Bar extends Foo {
        //some stuff overridden here
    }

}

如何让所有引用x.y.z.Foo的地方改为使用我的Bar课程?最好不要更改xml文件...

1 个答案:

答案 0 :(得分:0)

创建一个名为您尝试覆盖的类的bean。可以使用Bean注释在Java样式配置中实现。

@Configuration
@ImportResource({
        "classpath:applicationContext-common.xml",
        "classpath:app-servlet.xml"
})
static class TestConfig {
    static class Bar extends Foo {
        //some stuff overridden here
    }
    private Bar myTestBar = new Bar();
    @Bean(name="x.y.z.Foo")
    public Foo getFoo() {
       return myTestBar;
    }
}