Spring Boot实战:从0开始动手搭建企业级项目
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5.1 约定优于配置

首先讲解一下Spring Boot的核心设计思想:约定优于配置。

很多Java开发人员在阅读和学习Spring Boot教程的时候往往会对自动化配置感到困惑,更会被教程中所谓的Spring Boot核心设计思想约定优于配置所迷惑。那么,这个核心设计思想究竟是什么呢?

约定优于配置是由英文convention over configuration翻译而来的,也可翻译为惯例优先原则。这并不是一个新潮的概念,相反,这个概念很早就被提出来了。convention意为惯例、习俗、规矩,因此,可以说convention over configuration是一个理念,它并不是Spring Boot所独有的特性。

这个理念其实一直都在被遵循、被使用。举一个具体的例子,在MVC项目的开发中会把实体类放到entity目录下、把数据接口层定义在dao目录下、把控制器定义在controller目录下。如果在数据库中有一张名称为tb_mall_user的表,那么可能在项目中就对应有一个名称为MallUser的实体类。这就是开发人员都在遵循的规矩或者说是一种约定。但是所谓的规矩或者约定也需要配置文件来支持。约定优于配置并不是说不需要配置,它其实是一种开发原则,目的是在一定限度内减少需要开发人员手动配置的工作量,用默认的配置达到开发人员的需求。

正因为遵循这个约定,Spring Boot才让开发人员的开发效率更高。比如在第4章中开发的第一个Spring Boot项目。在项目中加入spring-boot-starter-web后,Spring Boot会自动导入Spring MVC的相关依赖和一个内置的Tomcat容器。在这里就有“约定优于配置”的理念。在导入spring-boot-starter-web后,就表示开发人员与Spring Boot之间约定当前项目是一个Web项目。既然是Web项目,又进一步约定开发人员会使用Spring MVC,从而自动装配DispatchServlet到IOC容器中。同理,开发人员在项目中加入jdbc-starter后,就表示开发人员与Spring Boot之间约定会对数据库进行操作,Spring Boot会自动导入JDBC相关的依赖并配置一个数据源对象供开发人员调用。

因为相关配置工作由Spring Boot主动进行,并且可以达到同样的目的,开发人员的工作量就减少了。这就是Spring Boot中的约定优于配置的特性。当然,如果开发人员想要自己完成相关配置,也可以通过编码的方式操作。

这种简洁高效的配置方式源于Spring Boot众多的自动化配置类及相关的编码设计。这些自动化配置类在类路径META-INF/spring.factories文件中,它通过@EnableAuto Configuration注解加载到容器中并发挥作用。在Spring Boot中,开发人员甚至可以做到零配置快速构建出所需的应用。

为了读者能更好地理解Spring Boot约定优于配置的设计思想,笔者将在后续章节中进行详细的源码剖析和讲解。