如何使用Spring @Configuration覆盖导入的资源?

时间:2012-05-10 13:20:27

标签: java spring configuration dependency-injection

是否可以使用Spring注释配置覆盖导入的资源?

配置类:

@Configuration
@ImportResource({"classpath:applicationContext.xml"})
public class CoreConfiguration {

    @Resource(name = "classA")
    private ClassA classA;

    @Bean(name = "nameIWantToOverride")
    private ClassB classB() {
       return new ClassB("different setting");
    }

}

applicationContext.xml包含:

<bean name="classA" class="a.b.c.ClassA">
     <property name="nameIWantToOverride" ref="classB" />
</bean>

如果classA有一个classB字段,但我希望它使用我在配置类中定义的ClassB,那可能吗?我试过切换订单,但没有帮助。似乎XML优先,因为当我运行实例化配置的简单测试时,它永远不会到达classB方法。如果我更改名称使其与xml文件中的bean不匹配,那么它确实会到达classB方法。

我已经看到它可以用另一种方式工作:Can spring framework override Annotation-based configuration with XML-based configuration?但是这个方向呢?由于这是更新的做事方式,我认为你能做到这一点。

我该怎么做才能解决这个问题?

编辑:使用XML更新。假设classA有多个字段,但我只想替换它。

1 个答案:

答案 0 :(得分:5)

您无法使用注释覆盖spring xml配置。

Spring XML配置始终优先于注释配置