zoukankan      html  css  js  c++  java
  • 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寻找相关属性在配置文件设值即可。
  • 相关阅读:
    css命名规范
    CSS3:box-sizing 怪异盒模型
    CSS3: box-shadow 阴影
    Spring boot分层和基本概念
    Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获
    Spring boot基础:配置文件配置变量、多环境的配置
    IDEA是如何导入项目的,及启动导入项目遇到的问题:无法加载主类的一连串问题
    创建spring boot项目启动报错遇到的问题
    详解Spring Boot集成MyBatis的开发流程
    spring boot常用注解使用小结
  • 原文地址:https://www.cnblogs.com/riches/p/15337055.html
Copyright © 2011-2022 走看看