Auto-Configuration
    下列是auto-configuration中常用的注解

    • Class Conditions(@ConditionalOnClass和@ConditionalOnMissingClass) @ConditionalOnClass 表示如果有后面的类,那么就加载这个自动配置,当类路径下有指定类的条件下@ConditionalOnMissingClass 如果没有后面的类,才自动配置
    • bean Conditions(@ConditionalOnBean和@ConditionalOnMissingBean) @ConditionOnBean在判断list的时候,如果list没有值,返回false,否则返回true,当容器里有指定Bean的条件下@ConditionOnMissingBean在判断list的时候,如果list没有值,返回true,否则返回false
    • Property Condition (@ConditionalOnProperty)@ConditionalOnProperty的核心功能是通过属性name以及havingValue来实现的。首先看matchIfMissing属性,用来指定如果配置文件中未进行对应属性配置时的默认处理:默认情况下matchIfMissing为false,也就是说如果未进行属性配置,则自动配置不生效。如果matchIfMissing为true,则表示如果没有对应的属性配置,则自动配置默认生效。在matchIfMissing为false时,如果name值为空,则返回false;如果name不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true,否则返回false。返回false也就意味着自动配置不会生效。
    • Resource Condition (@ConditionalOnResource)@Conditional,满足特定条件创建一个Bean,SpringBoot就是利用这个特性进行自动配置的。然后ConditionConfig使用了Java配置与@Conditional注解,根据LinuxCondition,或者WindowsCondition作为判断条件。
    • Web Application Condition(@ConditionalOnWebApplication和@ConditionalOnNotWebApplication)@ConditionalOnWebApplication主要的用处是: 当Spring为web服务时,才使注解的类生效;通常是配置@ConditionalOnNotWebApplication 不是web应用
    • SPEL表达式 (@ConditionalOnExpression)基于SpEL表达式作为判断条件,@ConditionalOnExpression(“‘true”)当括号中的内容为true时,使用该注解的类被实例化。@ConditionalOnExpression(“${**.enabled:false}”)针对 测试和生产环境可配置不同的值,如本地环境不需要起用job运行

    请写出上面各个注解的作用