学习笔记(五)

自动配置(一)

自动配置的原理

@SpringBootApplication

​ SpringBoot的核心注解,注解了SpringBoot的启动类;

1.@SpringBootConfiguration

​ 表示被注解的启动类是一个配置类,会被加入到spring容器中

2.@ComponentScan

​ 告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。

@ComponentScan这个注解在Spring中很重要,它对应XML配置中的元素@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean定义加载到IoC容器中。

我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。

@Component

​ 允许 Spring 自动检测自定义 Bean标注Spring管理的Bean,使用@Component注解在一个类上,表示将此类标记为Spring容器中的一个Bean。

3.@EnableAutoConfigration

表示开启自动配置


@EnableAutoConfiguration中@Import(EnableAutoConfigurationImportSelector.class)是导入“能够自动配置的导入选择器”的;@AutoConfigurationPackage中@Import(AutoConfigurationPackages.Registrar.class)是导入“自动配置包”的。

这其中,最关键的要属@Import(EnableAutoConfigurationImportSelector.class),借助EnableAutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。就像一只“八爪鱼”一样,借助于Spring框架原有的一个工具类:SpringFactoriesLoader的支持,@EnableAutoConfiguration可以智能的自动配置功效才得以大功告成!

结合注释我们可以知道,@EnableAutoConfiguration注解是用于自动配置的,她能够自动配置spring容器的上下文信息,能够将bean节点加载到IOC容器中。

因为个人感觉@EnableAutoConfiguration这个Annotation最为重要,所以放在最后来解读。大家是否还记得Spring框架提供的各种名字为@Enable开头的Annotation定义?比如@EnableScheduling、@EnableCaching、@EnableMBeanExport等,@EnableAutoConfiguration的理念和做事方式其实一脉相承,简单概括一下就是,借助@Import的支持,收集和注册特定场景相关的bean定义。

@EnableScheduling是通过@Import将Spring调度框架相关的bean定义都加载到IoC容器。

@EnableMBeanExport是通过@Import将JMX相关的bean定义加载到IoC容器。

而@EnableAutoConfiguration也是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器,仅此而已!

@EnableAutoConfiguration会根据类路径中的jar依赖为项目进行自动配置,如:添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,Spring Boot会对Tomcat和Spring MVC进行自动配置。


(1).@AutoConfigurationPackage

​ 该注解上有一个@Import(AutoConfigurationPackages.Registrar.class)注解,其中 Registrar 类的作用是将启动类所在包下的所有子包的组件扫描注入到spring容器中。

(2).@Import(AutoConfigurationImportSelector.class)

​ 其中AutoConfigurationImportSelector类中有一个getCandidateConfigurations()方法,该方法通过 SpringFactoriesLoader.loadFactoryNames()方法查找位于 META-INF / spring.factories文件中的所有自动配置类,并加载这些类。

在这里插入图片描述
在这里插入图片描述

spring.factories文件

​ 是以key-value键值对的形式存储文件里,其中有一个key=EnableAutoConfiguration,它对应的value值就是一个个以AutoConfiguration结尾来命名的 xxxAutoConfiguration 自动配置类。

SpringFactoriesLoader是通过加载启动器中META-INF/spring.factories文件来实现自动配置的。


@EnableAutoConfigrationProperties(XxxxProperties.class)

表示开启这个bean的配置属性并是将这个bean注入到spring容器中
在这里插入图片描述
所以spring boot在整个的启动过程中,其实就是在类路径的 META-INF spring.factories 文件中找到EnableAutoConfiguration对应的所有的自动配置类,然后将所有自动配置类加载到spring容器中。
在这里插入图片描述
第三部分 :
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值