一、前言

  上一篇分析了源码,看的相当头大,这一篇写一个小结来加深印象吧。由于自动配置原理中用到了很多条件注解,这里也记录一下常用的条件注解,方便速查。

二、条件注解

功能:按照一定的条件进行判断,如果满足条件则给容器注册bean。

  分类:

  • @ConditionalOnBean :仅仅在当前上下文中存在某个对象时,才会实例化一个Bean。
  • @ConditionalOnClass :某个class位于类路径上,才会实例化一个Bean。
  • @ConditionalOnExpression :当表达式为true的时候,才会实例化一个Bean。基于SpEL表达式的条件判断。
  • @ConditionalOnMissingBean
  • @ConditionalOnMissingClass
  • @ConditionalOnNotWebApplication
  • @ConditionalOnWebApplication
  • @ConditionalOnNotWebApplication
  • @ConditionalOnProperty
  • @ConditionalOnJava
  • @ConditionalOnResource
  • @ConditionalOnJndi
  • @ConditionalOnSingleCandidate

三、SpringBoot自动配置的原理

  • 1、【加载】从META-INF/spring.factories配置文件中加载自动配置类。
  • 2、【排除】排除掉@EnableAutoConfiguration注解的exclude属性指定的自动配置类。
  • 3、【过滤】然后再用AutoConfigurationImportFilter接口去过滤自动配置类是否符合其标注注解(若有标注的话)@ConditionalOnClass,@ConditionalOnBean和@ConditionalOnWebApplication的条件,若都符合的话则返回匹配结果。
  • 4、【事件回调】然后触发AutoConfigurationImportEvent事件,告诉ConditionEvaluationReport条件评估报告器对象来分别记录符合条件和exclude的自动配置类。
  • 5、【导入IOC容器】最后Spring再将筛选后的自动配置类导入IOC容器中。

Spring Boot源码(四)Spring Boot自动配置原理小结_配置文件

四、Spring Boot内部组成和其作用【重要】

  如果我们注意观察的话,Spring Boot内部核心的类命名规范很多都是类似的,我们来简单总结一下:

  • xxxAutoConfiguration :自动配置类,用于给容器中添加组件,从而代替之前我们手动完成大量繁琐的配置。
  • xxxProperties : 封装了对应自动配置类的默认属性值,如果我们需要自定义属性值,只需要根据xxxProperties寻找相关属性在配置文件设值即可。