文章目录
写在前面
文章参考自 Spring Boot 官方文档。
官方给 Spring Boot 的定义是:
Spring Boot 是构建所有基于 Spring 的应用程序的起点。Spring Boot 的设计目的是让您尽可能快地启动和运行,并尽可能少地预先配置Spring。
Spring Boot 是基于 Spring framework 的,并在此之上,提供了自动配置等。对于 Spring framework , Spring Boot 更像是接管了它的配置;根据约定大于配置,我们只需要使用更少的配置,就能像我们之前一样使用 Spring。
添加依赖
Maven 用户可以从 spring-boot-starter-parent
项目继承以获得合理的默认值:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
</parent>
当然,在某些情况下,你并不想使用 Spring Boot 作为父项目(或者说你已经有了父项目):
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
现在,我们可以添加自己项目需要的依赖关系:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
编写代码
一个最简单的web应用程序应该是什么样子?
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home(){
return "Hello World!";
}
public static void main(String[] args){
SpringApplication.run(Example.class, args);
}
}
仅仅这一个类,我们就能够通过 HTTP 请求 http://localhost:8080/
获取到 Hello World!
结果了。尽管这里没有太多代码,但依然做了很多事。
@RestController
和@RequestMapping
注解
示例类的第一个注释是@RestController
。这就是所谓的原型注释。它为阅读代码的人和 Spring 提供了类扮演特定角色的提示。在本例中,我们的类是一个 web @Controller
,因此 Spring 在处理传入的 web 请求时考虑它(经典的 MVC
当中的控制器)。
@RequestMapping
注释提供了“路由”信息。它告诉 Spring,任何带有/
路径的 HTTP 请求都应该映射到home 方法。@RestController
注释告诉 Spring 将结果字符串直接返回给调用者。
Rest 是一种互联网应用程序的
API
设计理念:URL定位资源,用HTTP动词(GET, POST, DELETE, PUT)描述操作。
-
@EnableAutoConfiguration
注解这个注释告诉 Spring Boot 根据您所添加的 jar 依赖项“猜测”您希望如何配置 Spring。由于
Spring-boot-starter-web
添加了Tomcat
和Spring MVC
,因此自动配置假定您正在开发一个web应用程序,并相应地设置Spring。
想想我们以前运行一个 Spring 的 web 程序需要做什么?在我们加入了 Spring 繁琐的 jar 包依赖后,为了让程序能够在 tomcat 下运行,我们需要在 web.xml
中配置 org.springframework.web.context.ContextLoaderListener
和 org.springframework.web.servlet.DispatcherServlet
。现在,导入了 spring-boot-starter-web
依赖后,Spring Boot 使用了嵌入式的 tomcat ,那么监听器 和DispatcherServlet
不需要了嘛?no!仍然需要,但不需要我们自己配置了。你可以通过控制台的日志信息,去追踪整个流程。
为什么常见的 @SpringBootApplication
注解不见了,我们可以看看 @SpringBootApplication
注解:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
@SpringBootApplication
注解类上添加了上面三个注解。@SpringBootConfiguration
注解表示一个类应提供 @Configuration
, 它可以作为 @Configuration
的替代品,但官方文档有说:
应用程序应该只包含一个
SpringBootConfiguration
注解,并且大多数情况下,仅仅需要从@SpringBootApplication
继承。
@EnableAutoConfiguration
注解启动 Spring应用程序上下文的自动配置,尝试猜测和配置您可能需要的 bean
。在我们上面的的程序中,取消该注解,你将在启动时,得到错误。
@ComponentScan
配置组件扫描指令,以与 @Configuration
一起使用。
我们可以结合自己的需要,自行添加注解。
创建一个可执行的 Jar
通过创建一个完全自包含的可执行jar文件来完成我们的示例,该文件可以在生产环境中运行。可执行 jar (有时称为 “ fat jar ” ) 是包含编译类以及代码需要运行的所有jar依赖项的归档文件。
要创建一个可执行 jar,我们需要将 spring-boot-maven-plugin
添加到pom.xml
中:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
运行 mvn pavkage
,查看 target
目录,则应该看到应用程序 jar 包,执行 java -jar app.jar
即可运行程序。
在应用程序目录下,我们还可以使用
mvn spring-boot:run
启动,退出程序,使用ctrl+c
来关闭。