更改特定bean的Spring上下文

时间:2014-01-22 14:17:20

标签: spring annotations javabeans

如果我有一个使用@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自动装配而没有更好的方法?

2 个答案:

答案 0 :(得分:1)

如果不触及java类,这是不可能的,因为_myService是MyService类型,所以它不能指向MyService2类型的实例。您必须更改java类,以便_myService属于常见的超类类型。

答案 1 :(得分:1)

您必须让容器理解您要在MyService2 bean中注入MyClass bean。所以它必须在你的xml配置或MyClass类中。

对于这些类型的东西,通常使用Service Locator Pattern

Here您可以通过Inversion of ControlMartin Fowler上找到传奇的博文,讨论服务定位器的优缺点以及各种依赖注入。

另见: