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为条件

  • 相关阅读:
    谈谈-开源数据库LitePal
    谈谈-Android-PickerView系列之封装(三)
    谈谈-Android-PickerView系列之源码解析(二)
    谈谈-Android-PickerView系列之介绍与使用(一)
    谈谈-ConstraintLayout完全解析
    问题解决-Failed to resolve: com.android.support.constraint:constraint-layout:1.0.0-alpha7
    谈谈-BaseAdapter的封装
    谈谈-使用SparseArray和ArrayMap代替HashMap
    Spring 集成Redis Cluster模式
    Redis三种集群模式-Cluster集群模式
  • 原文地址:https://www.cnblogs.com/sharpest/p/13712764.html
Copyright © 2011-2022 走看看