赞
踩
在上节中已经介绍了如何搭建Spring Boot工程,下面需要讨论它为什么在很少的配置下就能够运行。下面以最常用的Spring MVC为例进行说明。首先打开Maven的本地仓库,找到对应Spring Boot的文件夹,可以看到下图所示的目录。
这里先谈spring-boot-start-web的内容,未来还会谈到spring-boot-autoconfigure文件夹的内容。打开spring-boot-start-web文件夹,就可以看到一个名为spring-boot- starter-web-2.0.0.RELEASE.pom的文件,打开它就可以看到如下代码清单所示的代码。
- <?xml version="1.0" encoding="UTF-8"?>
- <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <!-- This module was also published with a richer model, Gradle metadata, -->
- <!-- which should be used instead. Do not delete the following line which -->
- <!-- is to indicate to Gradle or any Gradle module metadata file consumer -->
- <!-- that they should prefer consuming it instead. -->
- <!-- do_not_remove: published-with-gradle-metadata -->
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- <version>2.4.2</version>
- <name>spring-boot-starter-web</name>
- <description>Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container</description>
- <url>https://spring.io/projects/spring-boot</url>
- <organization>
- <name>Pivotal Software, Inc.</name>
- <url>https://spring.io</url>
- </organization>
- <licenses>
- <license>
- <name>Apache License, Version 2.0</name>
- <url>https://www.apache.org/licenses/LICENSE-2.0</url>
- </license>
- </licenses>
- <developers>
- <developer>
- <name>Pivotal</name>
- <email>info@pivotal.io</email>
- <organization>Pivotal Software, Inc.</organization>
- <organizationUrl>https://www.spring.io</organizationUrl>
- </developer>
- </developers>
- <scm>
- <connection>scm:git:git://github.com/spring-projects/spring-boot.git</connection>
- <developerConnection>scm:git:ssh://git@github.com/spring-projects/spring-boot.git</developerConnection>
- <url>https://github.com/spring-projects/spring-boot</url>
- </scm>
- <issueManagement>
- <system>GitHub</system>
- <url>https://github.com/spring-projects/spring-boot/issues</url>
- </issueManagement>
- <dependencies>
- <dependency>
- <!----springboot依赖----->
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter</artifactId>
- <version>2.4.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <!----json依赖----->
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-json</artifactId>
- <version>2.4.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <!----tomcat依赖----->
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-tomcat</artifactId>
- <version>2.4.2</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <!----spring-web依赖----->
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- <version>5.3.3</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <!----pring-webmvc依赖----->
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>5.3.3</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
- </project>
代码中的中文注释是我加入的。从这里可以看出,当加入spring-boot-starter-web后,它会通过Maven将对应的资源加载到我们的工程中,这样便能够形成依赖。但是这样还不足以运行Spring MVC项目,要运行它还需要对Spring MVC进行配置,让它能够生产Spring MVC所需的对象,才能启用Spring MVC,所以还需要进一步探讨。
为了探讨Spring MVC在Spring Boot自动配置的问题,首先在本地下载的Maven仓库的目录spring-boot-autoconfigure中找到spring-boot-autoconfigure-2.0.0.RELEASE-sources.jar的包。它是一个源码包,把它解压缩出来,打开它目录下的子目录org\springframework\boot\autoconfigure\web\servlet后,我们就可以看到许多配置类,如下图所示。
这里可以看到存在很多的类,其中加框的类DispatcherServletAutoConfiguration就是一个对DispatcherServlet进行自动配置的类。截取DispatcherServletAutoConfiguration源码中的一个内部类DispatcherServletConfiguration对Spring Boot的自动配置做最基本的讲解,如代码清单2-3所示。
注意上述代码中加粗注解的注释,这些中文注释是我加入的,为的是更好地说明Spring Boot的自动配置功能。通过上面的代码,可以看到Spring Boot内部已经自动为我们做了很多关于DispatcherServlet的配置,其中的@EnableConfigurationProperties还能够在读取配置内容的情况下自动生成Spring MVC所需的类,有关这些内容的讨论可以参考附录。到这里,应该明白为什么几乎在没有任何配置下就能用Spring Boot启动Spring MVC项目,这些都是Spring Boot通过Maven依赖找到对应的jar包和嵌入的服务器,然后使用默认自动配置类来创建默认的开发环境。但是有时候,我们需要对这些默认的环境进行修改以适应个性化的要求,这些在Spring Boot中也是非常简单的,正如@EnableConfigurationProperties注解那样,它允许读入配置文件的内容来自定义自动初始化所需的内容,下节将探讨这个问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。