Springboot自动装配原理
简单回答:
在项目启动的时候,Spring Boot框架会自动读取META-INF/spring.factories配置文件中org.springframework.boot.autoconfigure.EnableAutoConfiguration所配置的配置类,然后将其中所定义的bean根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。
★详细回答:
1. 在SpringBoot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是:
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan
2. 其中@EnableAutoConfiguration是实现自动化配置的核心注解。该注解通过@Import注解导入对应的配置选择器。
内部就是读取了该项目和该项目引用的Jar包的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。在这些配置类
中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中3. 条件判断会有像@ConditionalOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。
源码分析:
@SpringBootApplication封装了
@SpringBootConfiguration、
@EnableAutoConfiguration、
@ComponmentScan 三个注解
@EnableAutoConfiguration又封装了以下注解
上面图片中绿色封装的自动和装配的类有100多个,下面以redis的自动装配类来分析: