springboot自动装配原理分析

springboot自动装配原理分析

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中乱码解决的过滤器)

结论:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值