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

一、前言

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

二、条件注解

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

  分类:

  • @ConditionalOnBean :仅仅在当前上下文中存在某个对象时,才会实例化一个Bean。
  • @ConditionalOnClass :某个class位于类路径上,才会实例化一个Bean。
  • @ConditionalOnExpression :当表达式为true的时候,才会实例化一个Bean。基于SpEL表达式的条件判断。
  • @ConditionalOnMissingBean :仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean。
  • @ConditionalOnMissingClass :某个class类路径上不存在的时候,才会实例化一个Bean。
  • @ConditionalOnNotWebApplication :不是web应用,才会实例化一个Bean。
  • @ConditionalOnWebApplication :当项目是一个Web项目时进行实例化。
  • @ConditionalOnNotWebApplication :当项目不是一个Web项目时进行实例化。
  • @ConditionalOnProperty :当指定的属性有指定的值时进行实例化。
  • @ConditionalOnJava :当JVM版本为指定的版本范围时触发实例化。
  • @ConditionalOnResource :当类路径下有指定的资源时触发实例化。
  • @ConditionalOnJndi :在JNDI存在的条件下触发实例化。
  • @ConditionalOnSingleCandidate :当指定的Bean在容器中只有一个,或者有多个但是指定了首选的Bean时触发实例化。

三、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内部核心的类命名规范很多都是类似的,我们来简单总结一下:

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