springboot3自动装配机制原理源码分析

@springbootApplication注解

实现自动装配的核心就是@EnableAutoConfiguration。(springboot就是通过此注解实现自动装配机制,主要作用就是让springboot去扫描默认的配置类,如果没有这个类的话,springboot只会默认扫描启动类下包中各个类的注解)

 @Import注解的作用就是将对应的类配置到ioc容器中,这里就是AutoConfigurationImportSelector类配置到ioc容器中。

AutoConfigurationImportSelector类

这个类的作用就是自动配置类选择器。

 该配置类会通过此方法getAutoConfigurationEntry获取获取要自动配置的类。(此时就扫描了这146个默认配置类)

 启动进行DEBUG,可以看到有146个自动装配类,在断点处会执行getCandidateConfigurations方法。

在这些扫描到的默认配置类中只要有@AutoConfiguration注解并且没有对应的导入限制,就进行自动装配。 (在默认的配置类范围内识别)

导入不成功例子:

在此配置类中还需要ioc容器中存在相应的类才能执行自动装配,所以146个配置类并表示都进行配置的。 

默认的配置类范围内在

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports.

 总共默认自动装配的类有146个xxxxAutoConfiguration配置类

自动配置类与application.yml绑定原理

 例子:平时我们想要改tomcat的端口号时只需要在application.yml中修改就可以生效,分析源码。

在ServletWebServerFactoryAutoConfiguration配置类中有:

 @EnableConfigurationProperties(ServerProperties.class) 

就是将外部引入的serverProperties类配置到ioc容器中。

 ServerProperties类使用@ConfigurationProperties注解将applicatinon.yml中以server为前缀的配置信息赋给ServerProperties类。(此时此类就有port的值,也就是端口号的值)

 在返回servletweb工厂中,也就是ServletWebServerFactoryCustomizer

 在ServletWebServerFactoryCustomizer类中,因为传入了serverProperties类,最终就可以获取在application.yml中配置的端口号,实现tomcat的端口号更改。

其他的配置类和application.yml的属性绑定的步骤和此处的步骤一致。

总流程图 

核心流程总结:

1、导入starter,就会导入autoconfigure包。

2、autoconfigure 包里面 有一个文件 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,里面指定的所有启动要加载的自动配置类

3、@EnableAutoConfiguration 会自动的把上面文件里面写的所有自动配置类都导入进来。xxxAutoConfiguration 是有条件注解进行按需加载

4、xxxAutoConfiguration给容器中导入一堆组件,组件都是从 xxxProperties中提取属性值

5、xxxProperties又是和配置文件进行了绑定

效果:导入starter、修改配置文件,就能修改底层行为。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值