欢迎光临散文网 会员登陆 & 注册

spring学习笔记2|从源码看springboot如何实现自动配置

2023-04-20 12:18 作者:便宜酒  | 我要投稿

搭建一个ssm框架需要开发者手动进行大量配置,springboot的核心就是【自动配置】,使开发者专注于业务层。


springboot接管了:

DispatcherServlet配置

view层配置

自动导入依赖


【pom.xml】里有:

启动器:使自动配置生效

spring-boot-starter开头的


spring-boot-starter-web:web环境所有依赖。如实现http接口(已包含spirngmvc),容器默认为tomcat


spring-boot-starter-test:单元测试


build:支持打包成接口在target中

【启动类】里有:

@SpringbootApplication:导入启动类下的所有资源

        @ComponentScan:扫描主启动类同级的包,【所以建包一定要与该类同级】

        @SpringBootConfiguration:支持springboot的配置

                @Configuration:标记为配置类

                @Component:标记为组件


        @EnableAutoConfiguration:支持自动配置。

                @AutoConfigurationPackage:自动配置包

                                AutoConfigurationPackages.Registrar.class,自动将导入的包注册


                @Import({AutoConfigurationImportSelector.class}):导入自动配置选择器,选择                        启动类要用的配置导入,AutoConfigurationImportSelector.class里有:

                    List<String> configurations =

this.getCandidateConfigurations(annotationMetadata, attributes),获取了所有配置。


getCandidateConfigurations方法里有一个load方法,加载了META-INF/spring/%s.imports”里的自动配置类,注意,这是一大堆是所有的自动配置类,包括此工程用不上的

它们的@ConditionalOnxxx注解能识别哪些是需要的,以类名形式返回,添加到容器,这些类标记为bean。



getCandidateConfigurations方法下面还有一个空判断:

"No auto configuration classes found in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.”告诉开发者你要的配置类真找不到了,换个版本吧


找到META-INF/spring.factories,第四项# Auto Configuration Import Filters就是springboot帮我们导入的、用得上的自动配置类。只要我们pom.xml导入了对应启动器,就会配置成功。


综上,springboot在启动时扫描AutoConfiguration.imports. 根据@ConditionalOnxxx注解能识别哪些是需要的,加载到spring.factories,完成了自动配置。


 ps:我的springboot版本是3.0.5,老一点的版本貌似将所有配置类也放在spring.factories中,但仍通过@ConditionalOnxxx判断。不太会看源码,欢迎大佬指正。


spring学习笔记2|从源码看springboot如何实现自动配置的评论 (共 条)

分享到微博请遵守国家法律