繁体   English   中英

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

[英]Can I change the implementation class injected by spring in runtime?

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

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

有人可以帮助我吗?

PS。 对不起,我英语不好,希望能给理解。

解决的方法之一是应用服务定位器模式 代替直接注入bean,可以注入ServiceLocator,它可以返回不同的实现。

//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. 编写一个xml文件,通过添加相同的bean id和要使用的实现类来覆盖配置,然后将这个新的xml导入到您现有的应用程序上下文中。

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

可能会有更多,但大多数情况下,我们在项目数量中使用了“ 1”。

如果您有多个具有相同id的bean,spring将会获取最新的id,例如

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

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

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM