spring boot的自动配置原理

文章介绍了SpringBoot中,如何通过`@SpringBootApplication`和`@EnableAutoConfiguration`的约定优于配置原则,自动注入DispatcherServlet的过程。重点讲解了不同版本中配置文件的迁移,从spring.factories到imports文件的使用,以及SpringBoot如何根据条件自动配置Bean。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遵循约定大于配置的原则,在boot程序启动后,起步依赖中的一些bean对象会自动注入到IOC容器中

程序引入spring-boot-starter-web起步依赖,启动后,会自动往IOC容器中注入DispatcherServlet

(本图片来自互联网,最形象的一张)

注解@SpringBootApplication中组合了 @EnableAutoConfiguration,

@EnableAutoConfiguration又组合了注解@Import(AutoConfigurationImportSelector.class) (该类是importSelector接口的实现类) 该类重写了 String[] selectImports(...)方法,经过层层调用最终得到配置文件

该配置文件中写了一堆自动配置类的全类名,其中有个类(DispatcherServletAutoConfiguration) 完成DispatcherServlet的自动注入

该类源码

当我们引入web起步依赖后 我们就有了DispatcherServletAutoConfiguration这个类

spring boot就能帮我们自动注入一个DispatcherServlet ,并且在方法上为我们声明了@Bean注解 最后将方法的返回值自动注入到IOC容器中

核心在于配置文件

在springboot2.7版本以前,配置文件为spring.factories

在springboot2.7到springboot3.0以前,同时兼容了imports文件和spring.factories文件

springboot3.0以后只支持imports文件

1.在主启动类上添加了@SpringBootApplication注解,这个注解聚合了@EnableAutoConfiguration注解

2.@EnableAutoConfiguration注解又组合了@Import注解,导入了AutoConfigurationImportSelector

3.AutoConfiguationImportSelector类实现selectImports方法,这个方法经过层层调用,最终会读取META-INF目录下的后缀名为imports文件(boot3.0版本),在boot2.7以前的版本读取的是spring.factories文件,2.7至3.0期间兼容了imports文件和spring.factorues文件,3.0以后只读取imports配置文件,配置文件中配置了很多自动配置类的全限定名

4.springboot读取到这些全限定名以后,会解析注册条件,也就是@Conditional及其衍生注解,把满足条件的Bean对象自动注入IOC容器中

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值