SpringBoot自动装配原理
简单介绍
SpringBoot自动装配的核心注解有以下几个:
- @SpringBootConfiguration:该注解与@Configuration注解作用是相同的,用来声明当前也是一个配置类。
- @ComponentScan:组件扫描,默认扫描当前引导类所在包及其自包。
- @EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解,该注解通过@Import注解导入对应的配置选择器(重点)。
可以在SpringBoot项目中项目启动类的@SpringBootApplication注解中看到上面三个注解,如图:
自动装配原理---@EnableAutoConfiguration
@EnableAutoConfiguration内部源码分析
首先进入@EnableAutoConfiguration注解,可以看到一个@Import注解,此注解的作用可以导入某些类放到Spring容器中,注解中有AutoConfigurationImportSelector.class,目的是为了导入自动配置选择器,
此时呢,它会加载文件,将此文件中的内容加载到spring容器中。
SpringBoot2.7之前读取的文件
读取了该项目和该项目引用的Jar包的的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。
SpringBoot2.7之后读取的文件
读取了该项目和该项目引用的Jar包的的classpath路径下META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中的所配置的类的全类名。
文件内部分析
打开文件后,可以看到所有类都带有AutoConfiguration后缀,此文件就是SpringBoot自动装配的配置类。
按需配置规则
这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。
条件判断会有像@ConfigurationOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入sping容器中使用。