什么是 Spring Boot
Spring Boot 是一个用于构建独立的、基于 Spring 的生产级应用程序的框架。它简化了 Spring 应用的初始搭建以及开发过程,使得开发者能够快速地创建可以运行的应用程序,而无需进行大量的样板配置。
例如,在传统的 Spring 应用开发中,需要配置大量的 XML 文件或者 Java 配置类来定义各种 Bean,如数据源、事务管理器等。而 Spring Boot 通过自动配置(auto - configuration)功能,根据项目中添加的依赖自动配置这些组件,大大减少了配置的工作量。
核心特性
自动配置
Spring Boot 的自动配置是其核心特性之一。它会根据类路径下的依赖和一些预定义的条件来自动配置 Spring 应用。
比如,当在项目的pom.xml(Maven 项目)或者build.gradle(Gradle 项目)中添加了spring - webmvc依赖,Spring Boot 会自动配置一个 Spring MVC 应用,包括配置DispatcherServlet、视图解析器等组件。这些配置都是基于一系列的条件判断,如是否存在某个特定的类或者接口来触发相应的配置。
起步依赖(Starter Dependencies)
Spring Boot 提供了一系列的起步依赖,这些依赖是将一组相关的依赖打包在一起,方便开发者使用。
例如,spring - boot - starter - web包含了构建一个 Web 应用所需要的基本依赖,如 Spring MVC、Tomcat 等。当在项目中添加这个起步依赖后,就可以快速地开始构建 Web 应用,而不需要逐个添加spring - mvc、tomcat - embed - servlet等依赖。
嵌入式服务器支持
Spring Boot 支持嵌入式服务器,如 Tomcat、Jetty 和 Undertow。这些服务器可以直接嵌入到应用程序中,使得应用可以作为一个独立的可执行文件运行。
以 Tomcat 为例,在传统的 Web 应用开发中,需要将应用部署到外部的 Tomcat 服务器中。而在 Spring Boot 中,通过添加spring - boot - starter - web依赖,会自动嵌入 Tomcat 服务器。当启动应用时,Tomcat 会在应用内部启动,监听指定的端口(默认是 8080),处理 HTTP 请求。
项目结构
典型的 Spring Boot 项目结构包含src/main/java、src/main/resources和src/test/java等目录。
在src/main/java目录下,通常有一个主应用类(带有@SpringBootApplication注解),它是应用的入口点。例如:
收起
java
复制
import org.springframework.boot.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringBootApplication.run(MyApplication.class, args);
}
}
在src/main/resources目录中,包含配置文件(如application.properties或application.yml),用于配置应用的各种属性,如服务器端口、数据库连接等。
src/test/java目录用于存放单元测试和集成测试的代码。
配置文件
Spring Boot 支持多种配置文件格式,如properties和yaml。
application.properties
这是一种传统的配置文件格式,以键值对的形式配置属性。例如,配置服务器端口:server.port = 8080;配置数据库连接:spring.datasource.url=jdbc:mysql://localhost:3306/mydb。
application.yml
这是一种更具可读性的配置文件格式,使用缩进表示层次结构。例如:
收起
yaml
复制
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
配置文件中的属性可以通过@Value注解或者Environment接口在 Java 代码中获取和使用。例如:
收起
java
复制
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class MyConfig {
@Value("${server.port}")
private int port;
// 可以在这里使用port变量进行相关操作
}
注解
@SpringBootApplication
这是一个组合注解,它包含了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。
@SpringBootConfiguration表明这个类是一个配置类,可以用于定义 Bean 等配置操作。@EnableAutoConfiguration开启自动配置功能,@ComponentScan用于扫描组件,默认会扫描当前包及其子包下的@Component、@Service、@Repository、@Controller等注解标注的类。
@RestController
用于标注一个类,使其成为一个 RESTful 风格的控制器。它是@Controller和@ResponseBody的组合注解,意味着这个类中的方法返回值会直接作为 HTTP 响应的内容,而不是视图名称。例如:
收起
java
复制
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
}
@Service
用于标注服务层的类,表示这是一个业务逻辑组件。例如,一个处理用户业务逻辑的类可以用@Service标注:
收起
java
复制
import org.springframework.stereotype.Service;
@Service
public class UserService {
// 业务逻辑方法
}
以下是深入学习 Spring Boot 框架的一些建议:
一、掌握基础知识
收起
xml
复制
收起
java
复制
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DataSourceConfig {
@Bean
public BasicDataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
}
学习 Spring Boot 核心概念
spring - boot - autoconfigure
模块中,可以找到DataSourceAutoConfiguration
类。这个类在满足一定条件(如存在相关的数据源依赖)时,会自动配置数据源。它使用了@ConditionalOnClass
、@ConditionalOnMissingBean
等注解来确定是否需要进行配置。spring - boot - starter - web
包含了 Spring MVC、嵌入式服务器(如 Tomcat)等组件,学习如何通过添加不同的起步依赖来构建不同类型的应用,如 Web 应用、数据访问应用等。熟悉项目结构和配置文件
src/main/java
、src/main/resources
和src/test/java
等目录的用途。application.properties
或application.yml
),要深入理解如何配置各种属性,如服务器端口、数据库连接、日志级别等。学会如何通过@Value
注解和Environment
接口在代码中获取和使用配置文件中的属性。例如:收起
java
复制
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class MyConfig {
@Value("${server.port}")
private int port;
public int getPort() {
return port;
}
}
二、实践项目开发
spring - boot - starter - web
构建一个可以返回简单数据的接口。例如,创建一个控制器类:收起
java
复制
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, World!";
}
}
spring - boot - starter - data - jpa
来实现与数据库的交互。定义实体类、数据访问接口(继承JpaRepository
)和服务层类,然后在控制器中调用服务层方法来获取和处理数据。参考开源项目
解决实际问题
三、深入研究相关技术和工具
JpaRepository
接口可以很方便地进行基本的数据库操作:收起
java
复制
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository {
// 可以在这里定义自定义的查询方法,如根据姓名查找用户
User findByName(String name);
}
收起
java
复制
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@WebMvcTest(HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testSayHello() throws Exception {
mockMvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string("Hello, World!"));
}
}
/actuator/health
端点可以查看应用的健康状况,通过/actuator/metrics
端点可以获取应用的各种性能指标。