spring boot 特性一:自动配置原理分析

Spring Boot中引入了自动配置,让开发者利用起来更加的简便、快捷,本篇分析下Spring Boot中的自动配置原理。
注解结构:
在这里插入图片描述

一、启动类:

在这里插入图片描述

二、@SpringBootApplication注解

进入@SpringBootApplication的注解类,会发现@SpringBootApplication是一个组合注解,在所包含的注解中重点要关注如下三个注解:@SpringBootConfifiguration、@EnableAutoConfifiguration、@ComponentScan

在这里插入图片描述

  1. @ComponentScan
    作用就是根据定义的扫描路径,把符合扫描规则的类装配到spring容器中;
    如果不设置的话默认扫描@ComponentScan注解所在类的同级类和同级目录下的所有类,所以对于一个Spring Boot项目,一般会把入口类放在顶层目录中,这样就能够保证源码目录下的所有类都能够被扫描到。
    在这里插入图片描述

  2. @SpringBootConfifiguration注解
    在这里插入图片描述
    经过查看会发现在该注解类上有一个大家比较熟悉的注解@Confifiguration,该注解是用来标识某一个类为Spring的一个配置类,所以@SpringBootConfifiguration和@Confifiguration注解的作用一样,但是SpringBoot更推荐使用@SpringBootConfifiguration.

  3. @EnableAutoConfiguration
    这就是Spring Boot自动配置实现的核心入口;其定义为:
    在这里插入图片描述
    很显然能看出有一特殊的注解@Import,加载bean时会解析Import注解,因此需要讲目光聚集在这段代码;

三、@EnableAutoConfiguration

经过查看可发现@EnableAutoConfifiguration也是一个组合注解,其中有两个注解需要重点理解下,如
@AutoConfifigurationPackage和@Import

  1. AutoConfigurationPackage
    在这里插入图片描述
    该注解通过@Import引入了一个Registrar.class类,那么该类实现了什么功能?在Registrar类中的registerBeanDefifinitions方法上打个断点,debug启动后,该类主要是加载@SpringBootApplication注解所在类的包结构,并进行存储,为后期SpringBoot加载资源提供一个扫描的包路径。
    在这里插入图片描述
  2. @Import({AutoConfigurationImportSelector.class})
    上述@Import注解引入了一个类AutoConfigurationImportSelector.class,读取该类的源代码会发现,SpringBoot启动所在的装配类都在该注解类所在项目的META-INF/spring.factories文件中读取。
    来看EnableAutoConfigurationImportSelector类:
    在这里插入图片描述
    META-INF/spring.factories文件:
    在这里插入图片描述通过debug启动后,会发现默认情况下会加载自动装配类,spring.factoires文件中的自动装配类都在里面:
    在这里插入图片描述Debug可以看出已经成功将各个配置类读取。
    之后springboot会有一个排除机制,会根据pom文件中的启动器将一些没有使用到的配置类过滤掉。

分析完这些注解我们应该能明白的是sprinboot中的自动配置其实是使用这些条件注解来完成,当满足指定条件后就可以自动进行配置。

常见的条件注解:
@ConditionalOnBean        当容器中存在指定bean的条件下
@ConditionalOnClass        当类路径下存在指定类的条件下
@ConditionalOnMissingBean     当容器中不存在指定bean的条件下
@ConditionalOnMissingClass    当类路径下不存在指定类的条件下
@ConditionalOnProperty       指定的属性是否存在指定的值
@ConditionalOnResource       类路径下是否有指定的值
@ConditionalOnWebApplication   是web环境的条件下下
@ConditionalOnNotWebApplication 不是web环境的条件下

四、自动配置精髓

1、Spring Boot 启动时会加载大量的自动配置类

2、看需要的功能有没有在 Spring Boot 默认写好的自动配置类中;

3、再看自动配置类中到底配置了哪些组件;(只要已经包含了要用的组件,则无需再配置)

4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性,可以在配置文件中指定这些属性的值;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值