Spring Boot(八)自动配置

 1. @Conditional

    基于条件的自动装配,一般配合Condition接口一起使用,只有接口的实现类(一个或多个)都返回true,才装配,否则不装配
    它可以用在方法上,则只对该方法其作用,也可以用在类上面,则对该类下面的所有方法其作用。
    1.Demo
        1.创建1个接口EncodingConvert.java
        2.创建2个EncodingConvert接口的实现类GBKEncodingConvert.java和UTF8EncodingConvert.java
        3.创建1个Spring配置文件EncodingConvertConfiguration.java,装配这2个实现类
            @SpringBootConfiguration
            public class EncodingConvertConfiguration {
                @Bean
                public EncodingConvert getGBKEncodingConvert(){
                    return new GBKEncodingConvert();
                }
                @Bean
                public EncodingConvert getUTF8EncodingConvert(){
                    return new UTF8EncodingConvert();
                }
            }
        4.创建Condition的2个实现类GBKCondition.java、UTF8Condition.java
            public class GBKCondition implements Condition {
                @Override
                public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
                    String encoding=System.getProperty("file.encoding");
                    if(encoding!=null){
                        //toLowerCase() 方法用于将大写字符转换为小写。
                         return "gbk".equals(encoding.toLowerCase());
                    }
                    return false;
                }
            }
            --------
            public class UTF8Condition implements Condition {
                @Override
                public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
                    String encoding=System.getProperty("file.encoding");
                    if(encoding!=null){
                        //toLowerCase() 方法用于将大写字符转换为小写。
                         return "utf-8".equals(encoding.toLowerCase());
                    }
                    return false;
                }
            }
        5.使用 @Conditional(一)----1个Condition的实现类
            1.在方法上使用
                @Bean
                @Conditional(UTF8Condition.class)
                public EncodingConvert getUTF8EncodingConvert(){
                    return new UTF8EncodingConvert();
                }
            2.在类上使用
                @SpringBootConfiguration
                @Conditional(GBKCondition.class)
                public class EncodingConvertConfiguration {
                    
                }
        6.使用 @Conditional(二)----多个Condition的实现类,都返回true,才装配
            @SpringBootConfiguration
            @Conditional({GBKCondition.class,UTF8Condition.class})
            public class EncodingConvertConfiguration {}
    
    
    2.可以在启动参数 里改变 Encoding设置
        在启动类 右击Run -->Run Config-->Arguments -->VM arguments里 添加
        -D.file.encoding=GBK
    


 2.org.springframework.boot.autoconfigure.condition包下, SpringBoot给我们提供了大量的Condition实现类


    1. @ConditionalOnProperty()
        1.通过配置文件(application.properties)里的内容,来自动装配Bean
            @Bean
            @ConditionalOnProperty(name="local.port1" ,havingValue="80801",matchIfMissing=true)
            public Runnable getRunnable(){
                return ()->{};
            }
        2.解释
            1.name:配置文件里的属性名
            2.havingValue:这是一个String类型,如果配置文件中 该属性的值=该值,则装配
            3.matchIfMissing:这是一个boolean类型,默认为false。如果配置文件里没有该参数,matchIfMissing=true,则装配
    2. @ConditionalOnClass()
        1.当classpath中有某个类时,则装配 (如:sun.security.ec.CurveDB.class)    
            @Bean
            @ConditionalOnClass(name="sun.security.ec.CurveDB")
            public Runnable getRunnable2(){
                return ()->{};
            }    
    4. @ConditionalOnMissingClass()
        1.当classpath中没有某个类时,则装配
            @Bean
            @ConditionalOnMissingClass(value="sun.security.ec.CurveDB2")
            public Runnable getRunnable2_2(){
                return ()->{};
            }

    5.    @ConditionalOnBean()
        1.当Spring容器里有某个Bean时,则装配(如:User.class)
            @Bean
            @ConditionalOnBean(name="user")
            public Runnable getRunnable3(){
                return ()->{};
            }
        2.name里的Bean如果是类的名字,记得要小写
    
    6. @ConditionalOnMissingBean()
        1.当Spring容器里 没有某个Bean时,则装配

你可能感兴趣的:(Spring,Boot)