南宁中小企业网站制作,建外贸商城网站,北京设计网站建设,Windows怎么建设网站什么是约定大于配置
约定大于配置#xff08;Convention Over Configuration#xff09;是一种理念#xff0c;旨在通过默认约定和规则来减少开发人员需要做的配置工作。在Spring Boot框架中#xff0c;这一原则得到了充分应用#xff0c;帮助开发者更快地构…什么是约定大于配置
约定大于配置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实现约定大于配置的关键至此谜团解开