[英]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
}
}
您可以通过多种方式进行操作,以下几种方式:
编写一个xml文件,通过添加相同的bean id和要使用的实现类来覆盖配置,然后将这个新的xml导入到您现有的应用程序上下文中。
通过代码,您可以根据需要在调用代码之前设置新的实现。
可能会有更多,但大多数情况下,我们在项目数量中使用了“ 1”。
如果您有多个具有相同id的bean,spring将会获取最新的id,例如
<beans>
<import resource="a.xml"/>
<import resource="b.xml"/>
</beans>
现在,如果a.xml
和b.xml
都具有使用相同ID定义的bean,spring将使用b.xml
定义的bean。
干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.