我可以在运行时更改spring注入的实现类吗?

时间:2013-08-19 16:33:26

标签: java spring aop interceptor

我有一个类已经在applicationContext.xml上注入了spring,我需要在不更改applicationContext.xml的情况下更改该实现。

我听说过AOP“IntroductionInterceptor”,但我没有找到很多有用的结果。

任何人都可以帮助我?

PS。对不起,我的英文不好,希望能给予理解。

2 个答案:

答案 0 :(得分:2)

解决的一种方法是应用service locator pattern。 您可以注入一个可以返回不同实现的ServiceLocator,而不是直接注入bean。

//ServiceLocator bean
public Class ServiceLocator {

    @Resource(name="service1")
    private Service service1;

    @Resource(name="service1")
    private Service Service2;

    public Service getService(String service) {
       return ... //service
    }
}

答案 1 :(得分:0)

你可以用几种方式做到这一点,这里有几个:

  1. 编写一个xml文件,通过添加相同的bean id和要使用的实现类来覆盖配置,将这个新的xml导入到现有的应用程序上下文中。

  2. 通过代码,根据您的需要,您可以在调用代码之前设置新的实现。

  3. 可能会有更多,但大多数情况下我们在项目数量上使用了'1'。

    如果您有多个具有相同ID的bean,则spring将拾取最新的bean,例如

    <beans>
       <import resource="a.xml"/>
       <import resource="b.xml"/>
    </beans>
    

    现在,如果a.xmlb.xml都定义了具有相同Id的bean,则spring将使用b.xml中定义的bean。

    干杯!!