SpringBoot 自动装配原理

早期的Spring项目需要添加需要配置繁琐的xml,比如MVC、事务、数据库连接等繁琐的配置 。Spring Boot的出现就无需这些繁琐的配置,因为Spring Boot基于约定大于配置的理念,在项目启动时候,将约定的配置类自动配置到IOC容器里 。这些都因为Spring Boot有自动配置的特性 。
Sping Boot 如何实现自动配置Spring Boot都需要创建一个mian启动类,而启动类都含有@SpringBootApplication注解,从启动类,一步步探索源码 。
@SpringBootApplication注解Spring Boot 启动类上都有一个 @SpringBootApplication注解:
SpringBoot 自动装配原理

文章插图
@EnableAutoConfiguration注解@SpringBootApplication 里面有 @EnableAutoConfiguration 的注解:
SpringBoot 自动装配原理

文章插图
AutoConfigurationImportSelector类@EnableAutoConfiguration注解导入AutoConfigurationImportSelector类:
SpringBoot 自动装配原理

文章插图
selectImports()方法AutoConfigurationImportSelector类找到 selectImports 方法,里面有getAutoConfigurationEntry方法:
SpringBoot 自动装配原理

文章插图
SpringFactoriesLoader.loadFactoryNames() 方法getAutoConfigurationEntry方法通过SpringFactoriesLoader.loadFactoryNames() 扫描所有含有META-INF/spring.factoriesjar包:
SpringBoot 自动装配原理

文章插图

SpringBoot 自动装配原理

文章插图

SpringBoot 自动装配原理

文章插图

SpringBoot 自动装配原理

文章插图
spring-boot-autoconfigure-xxx.jar项目包含META-INF/spring.factories文件,spring.factories是一个键值对的形式,扫描该文件下@EnableAutoConfiguration对应类:
SpringBoot 自动装配原理

文章插图
自动配置主要由@EnableAutoConfiguration实现,添加了@EnableAutoConfiguration注解,会导入AutoConfigurationImportSelector类,里面的selectImports方法通过SpringFactoriesLoader.loadFactoryNames()扫描所有含有META-INF/spring.factoriesjar包,将对应key@EnableAutoConfiguration注解全名对应的value类全部装配到IOC容器中 。
Debug 验证打开Debug调式模式,在getCandidateConfigurations方法里面的SpringFactoriesLoader.loadFactoryNames()处设置断点,查看返回的configurations集合:
SpringBoot 自动装配原理

文章插图
【SpringBoot 自动装配原理】第一个元素是tk.mybatis.mapper.autoconfigure.MapperAutoConfiguration是因为引入了通用mapper的依赖:
SpringBoot 自动装配原理

文章插图
自动配置原理原理流程汇总从上面查看的源码,可以知道Spring Boot自动配置主要是@EnableAutoConfiguration实现的,@EnableAutoConfiguration注解导入AutoConfigurationImportSelector类,通过selectImports

经验总结扩展阅读