Guy*_*sky 2 java spring spring-bean spring-boot
我正在编写一个使用 spring 的库,供其他人使用。在我的库中,我有A一个具有接口B作为字段的类(带有@Autowired)。我有该字段的默认实现,但用户可以自己实现自定义实现。我想要发生的事情如下:如果用户实现了B,我希望那个 bean 被注入到A,否则我希望我的默认实现被注入。类似的东西@Primary
我知道用户可以添加@Primary注释以实现这一点,但我不希望他除此之外添加任何其他注释@Component(因为用户不清楚为什么他必须添加@Primary注释)
有没有办法实现这种行为?我也试过@Orderand @Priority,但没有运气 - 用户必须添加另一个注释。
谢谢!
您应该创建自己的自动配置。自动配置类总是最后处理,因此首先处理用户自己的配置,并且在使用@Conditional...注释时用户的 bean 将优先。
您的自动配置类应如下所示:
@Configuration
public class MyAutoConfiguration {
@ConditionalOnMissingBean(B.class)
@Bean
public B defaultImplementation() { return A(); }
@Bean
public UsesB classThatUsesB(B b) { return UsesB(b); }
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果您的库的用户定义了一个类型的 bean,B它将始终首先使用,如果没有,defaultImplementation则将使用由该方法创建的 bean 。
| 归档时间: |
|
| 查看次数: |
3745 次 |
| 最近记录: |