gpt4 book ai didi

java - Spring:没有限定符的Autowire bean

转载 作者:搜寻专家 更新时间:2023-11-01 02:01:42 24 4
gpt4 key购买 nike

是否可以在 spring 中 Autowiring 一个没有给定限定符的 bean?用例是拥有所有 bean 的列表,但排除一个:

@Autowired
@NotQualifier("excludedBean") // <-- can we do something like this?
List<SomeBean> someBeanList;


public class Bean1 implements SomeBean {}

public class Bean2 implements SomeBean {}

@Qualifier("excludedBean")
public class Bean3 implements SomeBean {}

在上面的例子中someList应包含 Bean1 的实例和 Bean2但不是 Bean3 .

(备注:我知道反之亦然,即向 Bean1Bean2 添加一些限定符,然后使用该限定符 Autowiring 。)

编辑:一些进一步的说明:

  • 所有 bean 都在 spring 上下文中(也被排除在外)。
  • 配置需要基于注释,而不是基于 xml。因此,例如关闭自动连线候选 does not work .
  • bean 的 Autowiring 功能必须保持一般。换句话说,我想从注入(inject)点 List<SomeBean> someBeanList; 中排除 bean ,但我想在其他地方 Autowiring 它。

最佳答案

您可以使用元注释@Conditional@Qualifier 引入您自己的注释

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
@Conditional(MyCondition.class)
public @interface ExcludeBean {

然后介绍可以执行条件逻辑的类

public class MyCondition implements Condition {

@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return !metadata.equals(ExcludeBean.class);
}

}

在你的配置类中

  @Bean
@ExcludeBean
public BeanA beanA() {
return new BeanA();
}

您还可以通过在特定 bean 上设置 autowire-candidate 或通过指定 default-autowire-candidates="list of candidates here" 将 bean 排除在 Autowiring 候选之外

关于java - Spring:没有限定符的Autowire bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44607457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com