Java 如何声明SpringBean autowire候选项=";假;当使用注释时?

Java 如何声明SpringBean autowire候选项=";假;当使用注释时?,java,spring,spring-annotations,Java,Spring,Spring Annotations,我正在使用@ComponentScan和@Component来定义我的SpringBean。我想声明其中一个bean为autowire-candidate=false 这可以通过xml中的该属性来完成。注释中不存在等价物吗 我之所以要这样做,是因为我有两个相同接口的实现,我不想使用@Qualifier 编辑:使用@Primary是一个有效的解决方法,但在我看来,autowire候选功能似乎是一个具有自己语义的有用功能 谢谢看起来Spring拒绝了autowire候选=false概念,不再支持它。

我正在使用
@ComponentScan
@Component
来定义我的SpringBean。我想声明其中一个bean为
autowire-candidate=false

这可以通过xml中的该属性来完成。注释中不存在等价物吗

我之所以要这样做,是因为我有两个相同接口的实现,我不想使用
@Qualifier

编辑:使用@Primary是一个有效的解决方法,但在我看来,autowire候选功能似乎是一个具有自己语义的有用功能


谢谢

看起来Spring拒绝了
autowire候选=false
概念,不再支持它。没有类似的注释,因此正如您所注意到的,
@Primary
是最好的解决方法


另一种方法是使用自定义的
org.springframework.beans.factory.support.AutowireCandidateResolver
,它在
DefaultListableBeanFactory
中使用,逻辑将不需要的bean从autowire候选中排除。在这种情况下,该技术将类似于
simpleautowiredcandidateresolver
中用于
autowire candidate=false
的技术。您还可以使用bean访问器来调整其可视性

然后,您可以
@Autowire
Bean
类,它将自动连接
Bean(无需抱怨多个匹配Bean)

由于类的定义(除非嵌入)不允许
private
/
受保护的
访问器,解决方法是使用一个
@Configuration
类实例化所有bean,并在隐藏私有/受保护的bean时发布公共bean(而不是直接注释类
@组件
\
@服务


另外,包保护的访问器可能值得尝试隐藏
@组件
注释类。我不知道这是否可行。

自Spring 5.1以来,您可以通过
autowireCandidate
属性在
@Bean
中配置
autowireCandidate

@Bean(autowireCandidate=false)
公共食品{
返回newFooBean();
}

@Primary
注释首选项。这样就不需要使用
@限定符了。感谢您的评论。是的,这实际上是我发现的解决问题的一种方法,但我只是想知道为什么注释中没有与autowire候选项等效的内容。看起来Spring拒绝了
autowire候选项=false
概念,它不再受支持。没有与注释的类比,因此,
@Primary
是您注意到的唯一方法。Sergey Bespalov,也许您应该把它作为答案来写,因为它似乎是唯一的真理。@imk imk imk imk imk 1070;ааааааааааааа107是在Spring中实现的吗?@是的,我创建了一个在answert中定义的类,并在另一个Spring组件中自动连接了一个类型为“Bean”的属性,Spring注入了“public”Bean。我想,我在网上看到的关于该功能的大多数文档都在Spring 1.0上,但它们一定已经过时了
@Configuration
public abstract class VisibilityConfiguration {

    @Bean
    public Bean publicBean() {
        Bean bean = new Bean();
        bean.setDependency(hiddenBean());
        return bean;
    }

    @Bean
    protected Bean hiddenBean() {
        return new Bean("protected bean");
    }
}