基础解析
引入具体配置类 @EnableConfigurationProperties(xxxx.class)
conditional注解
含义:基于条件的注解 作用:根据是否满足某一个特定条件来决定是否创建某个特定的Bean 意义:SpringBoot实现自动配置的关键基础能力
常用的conditional注解
- @ConditionalOnBean
 - @ConditionalOnMissingBean
 - @ConditionalOnClass
 - @ConditionalOnMissingClass
 - @ConditionalOnWebApplication
 - @ConditionalOnNotWebApplication
 - @ConditionalOnProperty 存在某个特定属性
 - @ConditionalOnJava 处于某个特定版本
 
自定义conditional注解的实现
- 实现一个自定义注解并且引入Conditional注解
 - 写一个接口实现Condition接口重写matches方法,符合条件返回true
 - 在自定义注解引入Condition接口实现类
 
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(MyCondition.class)
public @interface MyConditionAnnotation {
    String[] value() default {};
}
public class MyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String[] properties = (String[])metadata.getAnnotationAttributes("com.mooc.sb2.condi.MyConditionAnnotation").get("value");
        for (String property : properties) {
            if (StringUtils.isEmpty(context.getEnvironment().getProperty(property))) {
                return false;
            }
        }
        return true;
    }
}
使用
@Component
//@ConditionalOnProperty("com.mooc.condition")
//@MyConditionAnnotation({"com.mooc.condition1", "com.mooc.condition2"})
public class A {
}
starter
一种可插拔的插件。与jar包的区别在于:starter能实现自动配置。比如:引入一个mybatis的jar 包,引入配置基本参数过后,还需要将其注入到具体容器中。使用mybatis-stater能够实现自动配置。 大幅提升开发效率。
常用的starter有:
spring-boot-starter-web: 构建Web、Restful框架、SpringMVC、默认嵌入式容器Tomcat spring-boot-starter-data-redis: 通过Spring Data Redis,Jedis client使用Redis spring-boot-starter-aop: 通过Spring AOP、Aspect面向切面编程 spring-boot-starter: Core starter 包括自动配置支持、logging和YAML spring-boot-starter-mail: 使用Java mail、Spring email发送支持
自定义一个stater步骤
- 新建SpringBoot项目
 - 引入spring-boot-autoconfigure
 - 编写属性源及自动配置类
 - 在spring.factories中添加自动配置类实现
 - maven打包
 
starter原理解析
- 启动类上@SpringBootApplication
 - 引入AutoConfigurationImportSelector
 - 在ConfigurationClassParser中处理
 - 获取spring.factories中EnableAutoConfiguration实现
 
配置类过滤
- @ConditionalOnProperty
 - @OnPropertyCondition
 - @getMatchOutcome
 - 遍历注解属性集判断environment中是否含有并值一致
 - 返回对比结果
 
总结
- 介绍下熟悉的condition注解
 - 回答下conditional注解的原理
 - SpringBoot starter有什么作用?熟悉哪些?
 - 自定义搭建starter?
 - starter中的自动配置类是如何被引入到框架中的?
    
- spring.factories
 
 - starter中自动配置类生效的原理?
    
- 引入
 - 过滤