为什么都喜欢采用 Spring Boot 来开发软件系统?
熟悉企业级开发框架的同学,对 SpringBoot 可能并不陌生,它是一款非常优秀的开箱即用的开发框架,开发者可以使用它来快速的构建一个可独立运行的 Java 应用程序。
尤其是在分布式领域,SpringBoot 通常用于快速构建微服务应用,比如交易子系统、供应链子系统、物流子系统、结算子系统等。
01、简介
SpringBoot 之所以如此的流行,主要在于它能帮助开发者预组装 Spring 的一系列组件,同时通过简化配置的方式,进一步的帮忙开发者减轻了基于 Spring 的应用程序的搭建和开发难度。
SpringBoot 和 Spring 的关系,就好比整车和零部件的关系,Spring 相当于发动机、底盘、汽车外壳等零部件,但是要想上路,还得自己动手拼装,配置很繁琐;而 SpringBoot 相当于帮我们预装了一辆汽车,各零部件还是 Spring 提供的,用户可以直接开车上路。
由此可见,两者并非取代关系,如果想要深度掌握 SpringBoot,了解 Spring 也同样至关重要。
SpringBoot 和 Spring 的版本关系,可以用如下内容来概括。
不同的版本,对系统环境的要求是不一样的,如果出现不兼容的现象,请确保系统环境满足最低要求。
02、快速入门
下面我们以创建一个 SpringBoot 应用为例,并实现一个简单的 Http 请求处理。通过这个例子,一起来体验一下 SpringBoot 中开箱即用的特性。
快速创建 SpringBoot 项目,通常有两种方式:
- 第一种:使用 Spring Initializr 页面快速创建
- 第二种:手动创建
下面我们一起来看看。
2.1、使用 Spring Initializr 页面创建
Spring Initializr 是 Spring 官方提供一个快速创建 SpringBoot 应用的便捷工具。
使用方式很简单,访问https://start.spring.io/
地址,我们会看到如下界面。
填写相应的信息,最后点击Generate
按钮,即可快速导出一个 SpringBoot 工程文件。
也可以点击Explore
按钮,查看生成的文件目录结构。
从图中可以看出,Spring Boot 的基础结构共三个文件。
src/main/java
:程序开发以及主程序入口src/main/resources
:配置文件src/test/java
:测试程序
将文件导入到IntelliJ IDEA
中,运行SpringbootHelloApplication
的main
方法,即可启动服务。
这种创建方式,虽然很快速但是不够灵活,通常采用的是官方最新版本,如果当前环境不满足要求,比如当前系统环境 JDK 版本为 8,可能服务无法运行哦。
2.2、手动创建
手动构建项目是最常用的一种方式,以IntelliJ IDEA
为例,构建步骤如下。
2.2.1、创建一个 maven 项目
打开 IntelliJ IDEA,在菜单栏中选择File => New => Project..
,我们可以看到如下图所示的窗口。
选择Maven
,然后点击Next
。
填写相关的工程信息之后,继续点击Next
,直到Finish
,此时 Maven 项目创建完成。
2.2.2、添加 SpringBoot 依赖包
根据上文的版本对应关系,如果当前系统环境 JDK 版本为 8, SpringBoot 的适配版本为2.x
,如果你当前系统环境 JDK 版本也是8,可以采用2.1.0.RELEASE
版本来构建项目。
打开pom.xml
文件,添加 SpringBoot 相关依赖包,内容如下。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--引入spring boot父类-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
</parent>
<groupId>com.example</groupId>
<artifactId>springboot-hello</artifactId>
<version>1.0-SNAPSHOT</version>
<!--添加相关依赖包-->
<dependencies>
<!--spring boot核心-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--spring boot 测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--springmvc web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!--添加项目打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.2.3、创建配置文件
在src/main/resources
目录下,创建一个application.properties
全局配置文件,内容如下:
spring.application.name=springboot-hello
2.2.4、编写服务启动类
在src/main/java
目录下,创建一个服务启动类Application
,包名为com.example.springboot
,代码如下。
package com.example.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2.2.5、编写一个HTTP接口
在src/main/java
目录下,创建一个 http 接口,包名为com.example.springboot.web
,代码如下。
package com.example.springboot.web;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String index() {
return "Hello World!";
}
}
2.2.6、启动服务测试
最后运行Application
类,即可启动 SpringBoot 应用程序,服务日志如下。
在浏览器中输入http://localhost:8080/hello
,可以看到页面返回:Hello World!
2.2.7、编写单元测试用例
在src/test/java
目录下,可以编写一个单元测试来模拟 http 请求,创建一个ApplicationTests
单元测试类,包名为com.example.springboot
,代码如下。
package com.example.springboot;
import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
private MockMvc mvc;
@Before
public void setUp() throws Exception {
mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
}
@Test
public void getHello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Hello World!")));
}
}
至此,通过 Maven 构建一个 SpringBoot 项目基本完成,整个工程目录结构如下:
03、小结
可以发现,使用 Spring Boot 可以非常方便、快速的搭建 web 项目,开发者不用关心框架之间的兼容性、版本号等问题,任何你想要的组件,只需要添加一下依赖包即可,真正做到了开箱即用的效果。
打开 Maven Project 工程中的 Dependencies 按钮,可以看到 SpringBoot 项目中的依赖包如下。
当添加 SpringBoot 相关依赖包时, Maven 会自动从中央仓库拉取相关组件,然后打包到工程中。SpringBoot 相当于一个框架的管理者,默认整合了很多框架的使用方式,开发者要使用某个框架时,只需要配置一下即可。
另外需要注意的地方是:SpringBootApplication
注解默认扫描当前包下的相关类,如果把HelloController
类所在的包移动到 com.example.springboot
包之外是无法被扫描到,会导致请求出错,例如如下这种结构。
com
+- example
+- springboot
+- Application.java
+- web
| +- HelloController.java
|
面对这种情况,可以在SpringBootApplication
注解下,新增一个扫包注解,自定义扫描包的路径,例如如下方式。
@SpringBootApplication
@ComponentScan(basePackages="com.example")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在实际的开发过程中,通常建议按照推荐的方式来划分包目录,将SpringBootApplication
注解所在的位置放在最顶层,例如如下官方推荐的结构。
com
+- example
+- myproject
+- Application.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerDao.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderDao.java
关于 Spring Boot 更多的 web 开发用法,我们在下篇文章中再给大家介绍。
04、参考
1、spring官网