java - Spring 默认 bean 候选者

标签 java spring spring-boot spring-bean

我正在编写一个使用 spring 的库,供其他人使用。在我的库中,我有一个类 A,它有一个接口(interface) B 作为字段(使用 @Autowired)。 我有那个字段的默认实现,但用户可以自己实现自定义实现。我想要发生的事情如下: 如果用户实现了 B,我希望将该 bean 注入(inject)到 A,否则我希望注入(inject)我的默认实现。 类似于 @Primary

的反义词

我知道用户可以添加 @Primary 注释来实现这一点,但我不希望他添加除 @Component 之外的任何其他注释(因为用户不清楚为什么一定要加@Primary注解)

有没有办法实现这种行为?我也尝试过 @Order@Priority,但没有成功——用户必须添加另一个注释。

谢谢!

最佳答案

您应该创建 your own auto configuration .自动配置类总是最后处理,因此首先处理用户自己的配置,当使用 @Conditional... 注释时,用户的 bean 将优先。

你的自动配置类应该是这样的:

@Configuration
public class MyAutoConfiguration {

  @ConditionalOnMissingBean(B.class)
  @Bean
  public B defaultImplementation() { return A(); }

  @Bean
  public UsesB classThatUsesB(B b) { return UsesB(b); }

}

在这种情况下,如果您的库的用户定义了一个 B 类型的 bean,它将始终首先被使用,如果他们没有定义 defaultImplementation 创建的 bean方法将被使用。

关于java - Spring 默认 bean 候选者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49030379/

相关文章:

Spring应用程序中JSPX解析后的jQuery错误

java - 在spring boot中在辅助数据库上创建表

java - 如何使用 openJDK11 运行 Eclipse?

java - API Last.fm : track. getPlaycount() 返回 -1

java - Apache Camel 调度程序错误 : Failed to resolve endpoint

spring - 有没有比使用 TransactionSynchronizationManager.isActualTransactionActive() 更好的方法来检测 Spring DB 事务是否处于事件状态?

java - 正则表达式错误,请改用非捕获组

java - Spring事务抛出异常后不回滚

spring boot jsp文件无法查看

java - 查找数组中最接近的数字