2012-03-11 88 views
1

有没有办法指定Spring @autowired注释的默认类型?例如,我有扩展了ValidatorA的bean ValidatorA和Bean ValidatorB。 ValidatorA在其他一些地方使用,并使用@autowired注入。 有没有办法强制Spring在不改变现有代码的情况下注入ValidatorB而不是ValidatorA? 我在How to override the behavior of Spring @Autowired找到的唯一解决方案建议从上下文中排除ValidatorA。 还有别的办法吗? 例如,使用Guice,我只是将ValidatorA.class绑定到ValidatorB.class,并且将完成我所需要的。如何使Spring @autowired注释选择某种类型而不使用@Qualifier?

我没有问题添加@Qualifier到ValidatorB,但ValidatorA应该保持不变。 Guice提供了定义“提供者”的能力,Spring中是否有类似的东西?也许用@Configuration注释?

回答

1

有没有办法强制Spring注入ValidatorB而不是ValidatorA而不更改现有代码?

没有改变代码,我对此非常怀疑。你可以改变应用程序上下文或修改代码是这样的:

@Component 
@Qualifier("B") 
public class ValidatorB extends ValidatorA { 
} 

,然后注入像这样(有other syntactic options以及)

@Resource 
@Qualifier("B") 
private ValidatorA validatorB; 
2

我想你可以使用primary指标存在。如果您的bean是通过注释定义的,请将@Primary添加到ValidatorB定义。如果你使用xml config add primary="true"<bean>的定义。

+0

谢谢,听起来很不错的简单解决方案。 – Yuri 2012-03-11 13:01:47

相关问题