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");
}
}