Spring Boot项目启动的时候加载主配置类,并开启了自动配置功能。(Spring Boot的自动配置功能是Spring Boot的一大重要且突出的特性)

那么我们需要了解下它:

  如何加载主配置类?

    通过@SpringBootApplication的注解来找到并加载主配置类。

  如何开启自动配置功能?

    点进@SpringBootApplication的源码后可以发现这样一段代码,说明@SpringBootApplication注解由多个注解组成。

      

    其中,自动配置功能主要就是依靠@EnableAutoConfiguration注解实现的。

    点进@EnableAutoConfiguration注解后可以发现,该注解也是一个组合注解,下面一步步解析各个注解

      

      1.@Target

        java.lang.annotation.Target用于设定注解使用范围

        java.lang.annotation.ElementType

        Target通过ElementType来指定注解可使用范围(上面使用的是ElementType.Type),参考如下图:

        

      2.@Retention(RetentionPolicy.RUNTIME)

        Retention(保留)注解说明,这种类型的注解会被保留到哪个阶段(注解的生命周期)

          RetentionPolicy.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略 。

          RetentionPolicy.CLASS —— 这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略 。(这是默认的生命周期)

          RetentionPolicy.RUNTIME —— 这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。

      3@Documented

        Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中。(javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了。javadoc命令是用来生成自己API文档的,使用方式:使用命令行在目标文件所在目录输入javadoc +文件名.java。)

      4.@Inherited

        @Inherited注解标记其他的注解用于指明标记的注解是可以被自动继承的。(注意:此注解只对注解标记的超类有效,对接口是无效的。)

      5.@AutoConfigurationPackage

        自动配置包的注解,将主配置类所在的包及下面所有的子包里面的组件扫描到Spring容器中

      6.@Import({AutoConfigurationImportSelector.class})

        使用AutoConfigurationImportSelector选择器给容器中导入一些组件,全部导入的组件可以在jar包中找到(在spring.factories中)

        

        每一个自动配置类都会进行自动配置功能。

        例如:AOP的自动配置类

        

        

        其中的注解如下:

          @Configuration: 表明这是一个配置类,该注解也可以给容器中添加组件

          @ConditionalOnClass:判断当前项目中是否有这个类

          @ConditionalOnProperty: 判断配置文件是否存在某个配置(如果不存在,判断也是成立的)

      因此,spring.factories中的配置类会根据当前各种不同的条件,判断该配置类是否生效。

    最后,当配置文件生效的时候,Spring Boot就完成了自动配置功能。

    附: 在配置文件中输入debug=true,可以设置项目以debug的模式启动,从而可以看到项目用到了哪些自动配置类

Spring Boot自动配置总结的更多相关文章

  1. Springboot 系列(三)Spring Boot 自动配置原理

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 关于配置文件可以配置的内容,在 Spring ...

  2. Spring Boot自动配置与Spring 条件化配置

    SpringBoot自动配置 SpringBoot的自动配置是一个运行时(应用程序启动时)的过程,简化开发时间,无需浪费时间讨论具体的Spring配置,只需考虑如何利用SpringBoot的自动配置即 ...

  3. Spring Boot自动配置原理、实战

    Spring Boot自动配置原理 Spring Boot的自动配置注解是@EnableAutoConfiguration, 从上面的@Import的类可以找到下面自动加载自动配置的映射. org.s ...

  4. Spring Boot自动配置

    Spring Boot自动配置原理 Spring Boot的自动配置注解是@EnableAutoConfiguration, 从上面的@Import的类可以找到下面自动加载自动配置的映射. org.s ...

  5. Spring boot 自动配置自定义配置文件

    示例如下: 1.   新建 Maven 项目 properties 2.   pom.xml <project xmlns="http://maven.apache.org/POM/4 ...

  6. Spring Boot自动配置原理与实践(一)

    前言 Spring Boot众所周知是为了简化Spring的配置,省去XML的复杂化配置(虽然Spring官方推荐也使用Java配置)采用Java+Annotation方式配置.如下几个问题是我刚开始 ...

  7. Spring Boot自动配置原理(转)

    第3章 Spring Boot自动配置原理 3.1 SpringBoot的核心组件模块 首先,我们来简单统计一下SpringBoot核心工程的源码java文件数量: 我们cd到spring-boot- ...

  8. Spring Boot自动配置如何工作

    通过使用Mongo和MySQL DB实现的示例,深入了解Spring Boot的@Conditional注释世界. 在我以前的文章“为什么选择Spring Boot?”中,我们讨论了如何创建Sprin ...

  9. Spring boot --- 自动配置

    spring boot 自动配置 指的是针对很多spring 应用程序常见的应用功能,spring boot 能自动提供相关配置. spring boot 自动配置加载     Spring boot ...

  10. 使用@AutoConfigureBefore、After、Order调整Spring Boot自动配置顺序

    前言 Spring Boot是Spring家族具有划时代意义的一款产品,它发展自Spring Framework却又高于它,这种高于主要表现在其最重要的三大特性,而相较于这三大特性中更为重要的便是Sp ...

随机推荐

  1. Oracle中关键字like的使用总结

    Like 模糊查询 占位符 %  任意个数字符 _  一个字符 查询 用户名以‘S’开头的员工信息 Select * from emp where ename like 'S%' 查询用户名第二个字母 ...

  2. P3956 棋盘

    P3956 棋盘 题解 注释都在代码里了 这道题可以用DFS做,记忆化搜索,维护一个money[ ][ ] 表示到达当前节点的最小花费 不需要记录VIS,因为有一个最小值判断,如果走重复的话一定会得到 ...

  3. git 常用的分支技巧

    分支branch作为git一个强大功能,在平时开发如果能够善加使用,定能成倍提升开发效率. 1.分支开发模式 主分支master上一般是稳定版本,需要保证随时都能发布. 所以,可以建立一个开发分支用于 ...

  4. leetcode 123. 买卖股票的最佳时机 III

    使用动态规划的解法,空间复杂度O(2*2)如果交易k次则为O(2*k),时间复杂度O(2n),交易k次为O(n*k), 因此本题实际上可以退化为买卖一次的情况:去掉buy2和sell2,即leetco ...

  5. fixture作用范围

    ixture里面有个scope参数可以控制fixture的作用范围:session > module > class > function fixture(scope="f ...

  6. java:Oracle(级联删除,左右内外交叉自然连接,子查询,all,any,in)

    1.级联删除: -- 级联删除:裁员,公司倒闭 -- 级联删除(cascade),设置为null(setnull),放任不管(No action) -- cascade:(以一对多为例)如果删除多的一 ...

  7. jmeter业务建模中遇到的问题

    1.jmeter函数助手中的jexl3函数,不支持${__jexl3(15<${__Random(1,100,)}<36,)}这种写法,须这样写${__jexl3(15<${__Ra ...

  8. poatman接口测试--初试

    接到测试任务,对两个商品接口,进行接口测试 测试工具:postman 域名:rap2查找的或询问开发, 接口的参数规则:参考rap2的备注 开发没有添加详细说明的,让开发补充说明规则,及定义的返回状态 ...

  9. C++随笔(0)——关于const

    最近发现自己对const这一块其实不甚熟悉,所以复习一下const的相关知识点. 基本用法 const int bufSize = 512; 上面这样就可以将bufSize定义为常量,编译的时候编译器 ...

  10. 【HTTP】三、HTTP状态保持机制(Cookie和Session)

      前面我们提到HTTP协议的特点:无连接.无状态.无连接带来的时间开销随着HTTP/1.1引入了持久连接的机制得到了解决.现在来关注其"无状态"的特点.   所谓的无状态,就是指 ...