如何保证spring容器中只有一个某一个接口类型的单例实现类?

发布于 2022-09-11 19:32:44 字数 253 浏览 12 评论 0

现有个定制接口类型: Switcher,
自己写的自动配置中, 会注入默认的一个 SwitcherImpl 实现类.
别的地方引用这个模块时, 也可以定制一个 Switcher 覆盖默认的.
这样就需要保证, 整个 Spring 容器中, 只能存在一个 Switcher 接口类型的实现类.

请问, 这个改怎么保证?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦中楼上月下 2022-09-18 19:32:44

使用@ConditionalOnMissingBean即可

   @Configuration
   public class MyAutoConfiguration {
  
       @ConditionalOnMissingBean
       @Bean
       public Switcher defaultSwitcher() {
           ...
       }
  
   }

不使用默认配置的项目手动创建自定义的bean即可,由于自动配置加了@ConditionalOnMissingBean,spring-boot检测到BeanFactory内存在Switcher类的Bean后便不会再创建默认的bean

   @Configuration
   public class SwitcherConfiguration {
  
       @Bean
       public Switcher customSwitcher() {
           ...
       }
  
   }

如果非默认的bean也是自动配置通过自动配置注册的,则需要使用注解AutoConfigureBefore保证它先于默认bean的自动配置类执行


   @Configuration
   @AutoConfigureBefore(MyAutoConfiguration.class)
   public class CustomSwitcherAutoConfiguration {
  
       @Bean
       public Switcher customSwitcher() {
           ...
       }
  
   }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文