SpringBoot中自动配置关于condition

 Condition实现选择性创建Bean的操作

@Conditional()括号为.class文件 返回值为布尔类型 ,true则生成对应Bean 否则不生成

 

例: 当只有导入某坐标时 才加载某Bean

class文件需要继承Condition,重写matches方法 通过Class<?> cls=Class.forName("包名");          用try catch包着在catch中做返回值处理

 在配置文件中用@Configuration注解 class文件,@Bean注解需要生成的Bean

@Configuration
public class UserConfig(){
    @Bean
    @Conditional(ClassCondition.class)
    //括号内放class文件 返回值为布尔类型  true才会创建user的Bean
    public User user(){
        return new User();
    }
}


//class文件 
public class ClassCondition implements Condition{

    @Override
    public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata){
        bool flag=true;
        try{
            Class<?> cls=Class.forName("");//包名 想要导入的
        }catch(ClassNotFoundException e){
            flag=false;
            }
        return flag;    
    }
}

例:类判断定义为动态,动态指定哪个文件存在

        定义一个新的注解文件 Annotation的class文件 ConditionOnClass

//注解文件
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
//上面三个注解为Conditional注解文件中自带3个注解 要一并复制过来
@Conditional(ClassCondition.class)//这样子新注解功能与原注解功能就一致

public @interface ConditionOnClass{
    String[] value();//定义属性

}

//控制Bean生成文件 
@Configuration
public class UserConfig(){
    @Bean
    //@Conditional()//括号内放class文件 返回值为布尔类型  true才会创建user的Bean
    @ConditionOnClass("")//使用同上
    public User user(){
        return new User();
    }
}


//class文件 
public class ClassCondition implements Condition{

    @Override
    public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata){
    //context 上下文对象 用于获取环境,IOC容器,Classloader对象
    //metadata 注解原对象 用于获取注解的属性
    Map<String,Object> map= metadata.getAnnotationAttributes(ConditionOnClass.class.getName());
        bool flag=true;
        try{
             for (String className:value) {
                    Class<?> cls=Class.forName(className);

            }
            
        }catch(ClassNotFoundException e){
            flag=false;
            }
        return flag;    
    }
}

总结

        1.自定义条件:自定义类实现Condition接口,重写matches方法,在方法中逻辑判断返回boolean值

        2.SpringBoot常用条件注解

                @ConditionalOnProperty;判断配置文件是否有对应属性 值

                @ConditionalOnClass;判断环境中是否有对应字节码文件

                @ConditionalOnMissingBean;判断没有对应Bean

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值