2012-03-11 27 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

相關問題