【问题标题】:How to make Spring @autowired annotation to pick a certain type without using @Qualifier?如何在不使用 @Qualifier 的情况下使 Spring @autowired 注释选择某种类型?
【发布时间】:2012-03-11 09:16:47
【问题描述】:

有没有办法为 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,这正是我需要的。

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

【问题讨论】:

    标签: spring dependency-injection


    【解决方案1】:

    我认为你可以在那里使用primary 指示器。如果您的 bean 是通过注解定义的,请将 @Primary 添加到 ValidatorB 定义中。如果您使用的是 xml 配置,请将 primary="true" 添加到 <bean> 定义中。

    【讨论】:

    • 谢谢,听起来很简单。
    【解决方案2】:

    有没有办法在不改变现有代码的情况下强制 Spring 注入 ValidatorB 而不是 ValidatorA?

    不改代码,我很怀疑。您可以更改应用程序上下文或更改代码,如下所示:

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

    然后像这样注入(还有other syntactic options

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

    【讨论】:

      猜你喜欢
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 2011-07-19
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多