0
点赞
收藏
分享

微信扫一扫

Leetcode 3066. Minimum Operations to Exceed Threshold Value II

Alex富贵 03-03 17:00 阅读 2

什么是约定大于配置

"约定大于配置"(Convention Over Configuration)是一种理念,旨在通过默认约定和规则来减少开发人员需要做的配置工作。在Spring Boot框架中,这一原则得到了充分应用,帮助开发者更快地构建高效的应用程序

SpringBoot如何实现约定大于配置

@SpringBootApplication

在springboot项目中,我们会使用@SpringBootApplication注解在启动类上,它提供了相当多的便利性,帮助我们完成了当前启动类目录下的组件扫描和自动配置,其源码如下

 可以看到它是一个组合注解,相当于声明了@Configuration、@EnableAutoConfiguration和@ComponentScan,而自动装配实现的秘密就在@EnableAutoConfiguration注解上

@EnableAutoConfiguration

 

 查看@EnableAutoConfiguration源码,发现它注入了一个AutoConfigurationImportSelector类型的bean,继续跟进

AutoConfigurationImportSelector

我们查看一下AutoConfigurationImportSelector类关系图

AutoConfigurationImportSelector是做什么的呢?该类上的javadoc有这么一句话,“DeferredImportSelector to handle auto-configuration”,deferred的意思是推迟的,意为处理自动装配的推迟的ImportSelector

DeferredImportSelector 是 ImportSelector的子类,它在所有@Configuration bean都处理完毕后运行。而AutoConfigurationImportSelector实现了DeferredImportSelector接口,并实现了该接口的selectImports方法

查看selectImports方法发现,内部的getAutoConfigurationEntry方法就返回了要装配的@Configuration类

其中最关键的是getCandidateConfigurations方法,源码如下

这里调用了SpringFactoriesLoader.loadFactoryNames返回所有的自动装配类,这个方法的第一个入参就是EnableAutoConfiguration.class,第二个入参是获取的类加载器

loadSpringFactories

继续跟进源码,查看最底层的loadSpringFactories方法

 可以看到,loadSpringFactories方法通过类加载器获取META-INF/spring.factories资源,我们项目中的类路径下的(当然包括三方jar包)所有META-INF/spring.factories都会被读取,并返回被自动装配的类

META-INF/spring.factories

spring-boot-autoconfigure模块是springboot的自动装配模块

查看该模块下的spring.factories文件

可以看到,该文件下已经帮我们配置了相当多的Configuration类,这也是springboot实现约定大于配置的关键,至此谜团解开 

举报

相关推荐

0 条评论