本篇记录学习SpringBoot框架的过程。
版本:
“Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can ‘just run’.”
以构建一个简单的HelloWorld
web应用为例。
新建一个maven工程
配置pom.xml
文件,引入两个依赖:
<?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>
<groupId>org.example</groupId>
<artifactId>helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
创建目录src/main/java/boot
,并在其中创建主程序MainApplication
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 主程序类
* @SpringBootApplication:这是一个SpringBoot应用
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
无需配置tomcat,直接运行该主程序启动web服务
创建目录src/main/java/boot/controller
,并在其中编写业务类HelloController
:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String handle01() {
return "Hello, SpringBoot2!";
}
}
说明: 注解
@Controller
源码中包含@Controller
以及@ResponseBody
运行主程序,访问默认端口(8080),即可看到展示信息:
在目录src/main/resources下创建配置文件application.properties
:
server.port=8888
说明: 这里web服务的修改运行端口 更多配置信息可查看官网:Common Application Properties (spring.io)
在pom.xml
配置文件中导入如下依赖:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
可以将项目直接打成jar包
在jar包存在的目录下,启动cmd,直接运行:
在上述案例中可以看到在配置pom.xml
配置文件时,引入父依赖管理:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
查看源码可以看到它的父项目如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
再次点击其源码查看,就可以看到各种依赖:
几乎声明了所有开发中常用的依赖的版本号——自动版本仲裁机制。这也就使得在pom.xml
配置文件中添加所需依赖不用配置版本号(会有默认)。
如果需要的依赖版本跟默认有冲突,可以手动更改版本号(以mysql为例):
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
可以看到默认版本为8.0.21
更改版本号有两种方式:
说明: 如果配置少的话可以选择直接添加版本号;如果多的话建议用
<properties>
配置,便于管理。
以spring-boot-starter-web
为例,官方给出了许多spring-boot-starter-*
(*就是某种场景),只要引入starter,这个场景的所有常规需要的依赖都会自动引入。
第三方提供的简化开发的场景启动器(命名规范):*-spring-boot-starter
所有场景启动器最底层的依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
点击查看spring-boot-starter-web
源码可以看到,已经自动化配置了Tomcat依赖、SpringMVC全套组件:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.9.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来,因此无需配置包扫描。
如果想要改变包扫描目录,有两种方式:
@SpringBootApplication(scanBasePackages="xxx")
@ComponentScan("xxx")
Spring家族中必须掌握的一课。