springboot自动装配原理分析

tech2022-11-03  121

springboot自动装配原理分析

文章目录

springboot自动装配原理分析1.首先springboot项目依赖于父项目2.启动器3.主启动类4.分析

1.首先springboot项目依赖于父项目

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> 这里面管理了很多依赖的版本,这里是springboot的版本控制中心

2.启动器

springboot-boot-starter-xxxx:场景启动器

springboot-boot-stater-web:帮我们导入web模块正常运行所需要的组建

3.主启动类

@SpringBootApplication:声明这是springboot的主配置类 进入这个注解

​ @ComponentScan:相当于开启spring注解扫描

​ @SpringBootConfiguration:springboot的配置类,点进去发现,

​ @Configuration表示这是一个配置类

​ @Component表示这也是一个bean组件,负责启动程序

​ @EnableAutoConfiguration:开启自动配置 点进去

​ @AutoConfigurationPackage :自动配置包

​ @Import({Registrar.class}):将主启动类所在包及包下面所有子包的所有组件扫描到Spring容器

​ @Import(AutoConfigurationImportSelector.class):给容器导入组建

​ AutoConfigurationImportSelector:自动导入选择器

​ 1. 获取候选的配置,兜兜转转找到"META-INF/spring.factories"文件

​ 2.读取这个文件,并封装成Properties,此文件全是等待自动配置类的全路径

4.分析

​ 3. 在springboot-autoconfigure的jar包中的spring.factories下随便打开一个类进行分析, (Http编码自动配置)为例进行分析。

~~~java @Configuration(proxyBeanMethods = false) @EnableConfigurationProperties({HttpProperties.class}) @ConditionalOnWebApplication(type = Type.SERVLET) @ConditionalOnClass({CharacterEncodingFilter.class}) ~~~

1.@Configuration( proxyBeanMethods = false )

表示这是一个配置类,可以给容器添加组件。

2.@EnableConfigurationProperties({HttpProperties.class})

使使用 @ConfigurationProperties 注解生效。

进入 HttpProperties

3.@ConfigurationProperties( prefix = “spring.http”)

将配置文件和 HttpProperties 绑定起来。(从配置文件中获取指定的值,和bean的属性进行绑定)

看到这个注解,有点熟悉,在上一篇yaml配置文件中学到,将yaml中的值注入到所需类中时,用的就是这个注 解:

将配置文件中配置的每一个属性的值,映射到该组件中告诉SpringBoot将该类中的所有属性和配置文件中相关的配置进行绑定

4.@ConditionalOnWebApplication( type = Type.SERVLET )

@Conditional Spring的底层注解,判断作用:如果满足指定条件,整个配置类里面的配置才会生效。

5.@ConditionalOnClass({CharacterEncodingFilter.class})

判断当前项目中是否存在 CharacterEncodingFilter 类(SpringMVC中乱码解决的过滤器)

结论:

SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;整个J2EE自动配置都在springboot-autoconfigure的jar包中;它会根据条件(启动器)给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;
最新回复(0)