如果我有一个使用@Value注释设置值的类
class myClass{
@Value(${myservice})
public MyService _myService;
}
bean配置看起来有点像这样:
<bean id="myservice" class="tomy.MyService"></bean> //in Spring context
<bean id="myClass" class="tomy.myClass"></bean>
说某人出现并希望myClass使用myService2(与'myservice'共享超级类)而不触及java类 - 是否可以更改$ {myservice}的输出/“值”
即
<bean id="myClass" class="tomy.myClass">
<property name="myservice" ref="myOtherService" /> //this of course doesn't work as it looks for the setter method of myService
</bean>
这样
class myClass{
@Value(${myservice})
public MyService _myService;
}
_myService现在应该存储myOtherService的实例而不是myService
修改
也许更好的方式来描述它...如果可以在不触及java bean的情况下覆盖从xml自动装配而没有更好的方法?
答案 0 :(得分:1)
如果不触及java类,这是不可能的,因为_myService是MyService类型,所以它不能指向MyService2类型的实例。您必须更改java类,以便_myService属于常见的超类类型。
答案 1 :(得分:1)
您必须让容器理解您要在MyService2
bean中注入MyClass
bean。所以它必须在你的xml配置或MyClass
类中。
对于这些类型的东西,通常使用Service Locator Pattern。
Here您可以通过Inversion of Control在Martin Fowler上找到传奇的博文,讨论服务定位器的优缺点以及各种依赖注入。
另见: