java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > @ConditionalOnMissingBean注解

SpringBoot中的@ConditionalOnMissingBean注解使用详解

作者:Java小白笔记

这篇文章主要介绍了SpringBoot中的@ConditionalOnMissingBean注解使用详解,@ConditionalOnMissingBean作用在@Bean定义上,也就是说在容器加载它作用的Bean时,检查容器中是否存在目标类型,需要的朋友可以参考下

@ConditionalOnMissingBean 说明

@ConditionalOnMissingBean是用于修饰Bean的一个注解,在项目启动时开始自动化配置注册生成Bean,当某个类型的Bean被注册之后,如果再注册相同类型的Bean就会失败,该注解会保证Spring容器中只有一个Bean类型的实例,当注册多个相同类型的Bean时,会出现异常。

当一个接口有多个实现类时,如果只希望它有一个实现类,那就在其他的各个实现类上加上这个注解。 @ConditionalOnMissingBean作用在@Bean定义上,也就是说在容器加载它作用的Bean时,检查容器中是否存在目标类型(@ConditionalOnMissingBean注解的value值)的Bean了,如果存在则跳过Bean的默认加载动作,如果不存在则加载该Bean完成注册。

注意

代码实例

为什么要用这个注解?

1、center,task,videoAccess依赖于common,center中有根据用户id获取信息的Feign接口

2、在common中有一个AOP方法是统一获取用户信息的

3、实现这个功能方法有2种:

​ (1)可以在common中直直接引用Center中的feign接口,center可以正常启动,别的服务会报注入的Feign会找不到,那这样就影响到别的服务了呀,这个问题需要解决

​ (2)所以common中定义了一个公共BaseAccountService接口,

流程是:spring启动–》加载feign实例–》如果有实例,拿系统创建的实例;如果没有这个实例,返回一个我预先定义的一个实例,这样别的服务启动就就不会报错

image-20220902142154009

image-20220902143335229

==center中的Feign实现定义的BaseAccountService

image-20220902143503312

别的服务只需要加上@EnableFeignClients这个注解就可以扫描的到Center中的Feign

image-20220902143903348

==使用@ConditionalOnMissingBean(value = {BaseAccountService.class})这个注解处理

@Configuration
public class BaseAccountServiceBeanMissConfig {
    @Bean
    @ConditionalOnMissingBean(value = {BaseAccountService.class})
    public BaseAccountService  getNewBaseAccountBean() {
      return  new BaseAccountService(){
          @Override
          public Result<AccountInfoResponse> queryAccountDetails(Long userId) {
              return new Result<AccountInfoResponse>(new AccountInfoResponse() );
          }
      };
    }
}

到此这篇关于SpringBoot中的@ConditionalOnMissingBean注解使用详解的文章就介绍到这了,更多相关@ConditionalOnMissingBean注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文