SpringBoot自动装配原理

简单介绍

SpringBoot自动装配的核心注解有以下几个:

  • @SpringBootConfiguration:该注解与@Configuration注解作用是相同的,用来声明当前也是一个配置类。
  • @ComponentScan:组件扫描,默认扫描当前引导类所在包及其自包。
  • @EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解,该注解通过@Import注解导入对应的配置选择器(重点)。

可以在SpringBoot项目中项目启动类的@SpringBootApplication注解中看到上面三个注解,如图:
f494fb8db26640d3af9c2386ef1f0408.png

自动装配原理---@EnableAutoConfiguration

@EnableAutoConfiguration内部源码分析

首先进入@EnableAutoConfiguration注解,可以看到一个@Import注解,此注解的作用可以导入某些类放到Spring容器中,注解中有AutoConfigurationImportSelector.class,目的是为了导入自动配置选择器
此时呢,它会加载文件,将此文件中的内容加载到spring容器中。
f494fb8db26640d3af9c2386ef1f0408.png

SpringBoot2.7之前读取的文件

读取了该项目和该项目引用的Jar包的的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。
419b812f7f9b4a5f852d8f1a8b3ddc6f.png

SpringBoot2.7之后读取的文件

读取了该项目和该项目引用的Jar包的的classpath路径下META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中的所配置的类的全类名。
a69465c439c0486d8b21f36f27609c33.png

文件内部分析

打开文件后,可以看到所有类都带有AutoConfiguration后缀,此文件就是SpringBoot自动装配的配置类。
b5a08bac81d44894aaf1f4264e8f2b08.png

按需配置规则

这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。
条件判断会有像@ConfigurationOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入sping容器中使用。
690d1d5e933a41df9229e3ef355ed2ac.png

目录

Total Likes
1
Total Comments
0