zoukankan      html  css  js  c++  java
  • @ConditionalOnMissingBean注解使用案例

    转自:https://blog.csdn.net/weixin_43993065/article/details/106740140

    前言

    继@Conditional注解后,又基于此注解推出了很多派生注解,比如@ConditionalOnBean、@ConditionalOnMissingBean、@ConditionalOnExpression、@ConditionalOnClass…动态注入bean变得更方便了。本篇将讲解@ConditionalOnMissingBean注解。

    需求

    做了一个功能接口提供给消费者实现,考虑到有些消费者没有实现接口,就会导致报错。所以需要写一个默认实现,并且在消费者有实现接口时,采用消费者的接口。

    @Configuration
    public class InterceptorConfig {
    
        @Bean
        @ConditionalOnMissingBean(IOperInfo.class)
        public IOperInfo iOperInfo(){
            return new DefaultOperInfoImpl();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    @ConditionalOnMissingBean就实现了这个功能,它作用在@bean定义上,就是在容器加载它作用的bean时,检查容器中是否存在目标类型(@ConditionalOnMissingBean注解的value值)的bean了,如果存在这跳过原始bean的默认加载动作。

    注解分析

    //可以标注在类和方法上
    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    //使用了@Conditional注解,条件类是OnBeanCondition
    @Conditional({OnBeanCondition.class})
    public @interface ConditionalOnMissingBean {
    	// 需要检查的 bean 的 class 类型。当 ApplicationContext 不包含每一个被指定的 class 时条件匹配。
        Class<?>[] value() default {}; 
     	// 需要检查的 bean 的 class 类型名称。当 ApplicationContext 不包含每一个被指定的 class 时条件匹配。
        String[] type() default {};
     	// 识别匹配 bean 时,可以被忽略的 bean 的 class 类型
        Class<?>[] ignored() default {};
     	// 识别匹配 bean 时,可以被忽略的 bean 的 class 类型名称
        String[] ignoredType() default {};
     	// 当 ApplicationContext 不包含带有这些注解的 bean 时条件匹配。
        Class<? extends Annotation>[] annotation() default {};
     	// 需要检查的 bean 的 name。当 ApplicationContext 不包含任意指定的每一个的 class 时条件匹配。
        String[] name() default {};
     	// 搜索容器层级,当前容器,父容器
        SearchStrategy search() default SearchStrategy.ALL;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    @ConditionalOnBean和@ConditionalOnMissBean、@Conditional

    简单理解就是@ConditionalOnBean是依赖,@ConditionalOnMissBean是排斥,@Conditional为条件

  • 相关阅读:
    嵌入式系统WinCE下应用程序GUI界面开发【转】
    pidstat 命令详解
    shell脚本检查是否存在tun0虚拟网卡,若不不存在服务器更改port,并重启服务器,客户端修改port,并重新启动客户端
    阿里云k8s部署zookeeper集群
    Kubernetes StatefulSet
    dubbo-admin管理平台搭建
    k8s pv,pvc无法删除问题
    Linux配置AndroidSDK&Jenkins远程部署
    CentOS的vsftp修改默认配置路径方法
    Java语法糖3:泛型
  • 原文地址:https://www.cnblogs.com/sharpest/p/13712764.html
Copyright © 2011-2022 走看看