Spring Boot 知识点

一、Spring Boot 概述

1.1 定义

Spring Boot 是基于 Spring 框架的快速开发框架,旨在简化 Spring 应用的初始搭建及开发过程。它通过「约定优于配置」的理念,自动配置大部分开发场景下的通用设置,让开发者聚焦业务逻辑而非基础设施配置。例如,以往使用 Spring 框架开发项目时,需要手动配置大量的 XML 文件和依赖,而 Spring Boot 则可以通过自动配置和起步依赖,快速集成常用的第三方框架,减少开发者的配置工作量。

1.2 核心优势

  • 快速启动:通过 Starter 一键集成依赖,无需手动编写大量 XML 或繁琐配置。例如,引入 spring-boot-starter-web 依赖,就可以快速整合 SpringMVC 框架,同时通过 Maven 继承的方式引用到 Spring - aop、Spring - beans、Spring - core、Spring - web 等相关依赖。
  • 内嵌容器:内置 Tomcat、Jetty 等 Servlet 容器,可直接运行 JAR 包,无需手动部署。这使得 Web 应用程序的部署变得简单,开发者可以将应用打包成一个独立的 JAR 文件,直接通过 java - jar 命令运行。
  • 生产级特性:内置 Actuator 监控、健康检查、安全管理等功能,开箱即用。Actuator 可以提供应用的运行时信息,如健康状态、指标监控、日志信息等,方便开发者在生产环境中对应用进行监控和管理。
  • 微服务友好:与 Spring Cloud 无缝整合,支持服务注册、配置中心、链路追踪等微服务场景。Spring Boot 为微服务架构提供了良好的支持,使得开发者可以快速构建和部署微服务应用。

二、Spring Boot 核心概念与架构

2.1 自动配置(Auto - configuration)

Spring Boot 通过 @EnableAutoConfiguration 注解实现自动配置,核心原理如下:

  • 类路径扫描:检测项目中引入的依赖(如 spring - boot - starter - web),触发对应的自动配置类(如 WebMvcAutoConfiguration)。例如,当项目中引入了 spring - boot - starter - web 依赖时,Spring Boot 会自动配置 SpringMVC 框架和嵌入式 Tomcat 服务器。
  • 条件注解过滤:通过 @ConditionalOnClass(存在某个类时生效)、@ConditionalOnMissingBean(无自定义 Bean 时生效)等注解动态控制配置的加载。例如,如果开发者自己定义了一个 WebMvcConfigurationSupport 的类,那么 Spring Boot 的默认 Web 配置就会失效。
  • 属性绑定:通过 @ConfigurationPropertiesapplication.properties / application.yml 中的配置注入到 Bean 中。例如,在 application.yml 中配置了数据库连接信息,通过 @ConfigurationProperties 注解可以将这些配置信息绑定到对应的 Java Bean 中。

Spring Boot自动配置原理

2.2 Starter 依赖机制

Starter 是 Spring Boot 封装依赖的核心模块,命名规范为 spring - boot - starter - *,作用是将相关依赖聚合为单一模块,简化依赖管理。

  • 核心 Starter 示例
    • spring - boot - starter - web:包含 Spring MVC、Tomcat、JSON 解析等 Web 开发必需依赖。
    • spring - boot - starter - data - jpa:整合 Hibernate、Spring Data JPA,简化数据库操作。
    • spring - boot - starter - security:集成 Spring Security,快速实现认证授权。
  • 使用方式:在 pom.xml 中引入 Starter,Spring Boot 自动处理依赖版本和传递性依赖。例如,在 pom.xml 中添加 spring - boot - starter - web 依赖,Spring Boot 会自动引入 SpringMVC、Tomcat 等相关依赖,并且处理好它们之间的版本兼容性问题。

Spring Boot Starter依赖机制

三、Spring Boot 快速入门

3.1 开发环境准备

  • JDK:建议使用 Java 17 +(Spring Boot 3.x 最低要求)。
  • IDE:IntelliJ IDEA(推荐)或 Eclipse,安装 Spring Boot 插件。
  • 构建工具:Maven 3.6 + 或 Gradle 7 +。

3.2 创建第一个 Spring Boot 项目

  • 方式一:通过 Spring Initializr 网页端:访问 start.spring.io,选择 Group(如 com.example)、Artifact(如 demo)、Java 版本(17)、依赖(如 Web),下载生成的 ZIP 包,解压后导入 IDE。
  • 方式二:IDE 内置模板:在 IntelliJ IDEA 中选择 File > New > Project > Spring Boot,按向导配置项目信息。

3.3 项目结构解析

一个典型的 Spring Boot 项目结构如下:

demo /  
├─ src / 
│ ├─ main /
│ │ ├─ java / 
│ │ │ └─ com / 
│ │ │ └─ example / 
│ │ │ │  └─ demo / 
│ │ │ │  │  ├─ controller / # 控制器层(处理 HTTP 请求) 
│ │ │ │  │  ├─ service / # 业务逻辑层 
│ │ │ │  │  └─ repository / # 数据访问层(如 Spring Data JPA 接口) 
│ │ │ ├─ DemoApplication.java # 启动类(含 @SpringBootApplication 注解) 
│ │ ├─ resources / 
│ │ │ ├─ application.properties # 主配置文件(也可用 application.yml) 
│ │ │ ├─ static / # 静态资源(CSS、JS、图片等) 
│ │ │ └─ templates / # 模板文件(如 Thymeleaf 页面) 
└─ pom.xml # Maven 依赖配置文件

Spring Boot项目结构

3.4 编写第一个 RESTful API

以下是一个简单的 RESTful API 示例:

@RestController  
@RequestMapping("/api/hello")  
public class HelloController {  
    @GetMapping  
    public String hello() {  
        return "Hello, Spring Boot!";  
    }  
}

在上述代码中,@RestController 注解表示这是一个 RESTful 风格的控制器,@RequestMapping 注解指定了请求的路径,@GetMapping 注解表示处理 GET 请求。

四、Spring Boot 常用注解

4.1 @SpringBootApplication

通常加到启动类上,被标注的类可以定义一个或多个 Bean,并自动触发自动配置 Bean 和自动扫描组件,可看作是 @Configuration@EnableAutoConfiguration@ComponentScan 注解的集合。例如:

@SpringBootApplication  
public class DemoApplication {  
    public static void main(String[] args) { 
         SpringApplication.run(DemoApplication.class, args);  
    }  
}

4.2 @RestController@RequestMapping

  • @RestController 注解继承自 @Controller 注解,用于标识一个 RESTful Web 服务的控制器,返回的是数据,而不是视图。
  • @RequestMapping 方法级别的映射注解,用于将 HTTP 请求映射到控制器的处理方法上。例如:
@RestController  
@RequestMapping("/users") 
public class UserController {  
    @Autowired  
    private UserService userService;   

    @GetMapping("/{id}")  
    public User getUser(@PathVariable Long id) {  
        return userService.getUser(id);  
    }   

    @PostMapping  
    public User createUser(@RequestBody User user) {  
        return userService.createUser(user);  
    }  

}

4.3 @EnableAutoConfiguration

该注解告诉 Spring Boot 根据添加的 jar 依赖猜测你想如何配置 Spring。如果发现应用了你不想要的特定自动配置类,可以使用该注解的排除属性来禁用它们。例如:

@Configuration  
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})  
public class MyConfiguration {  }

4.4 @Configuration

Spring Boot 提倡基于 Java 的配置,@Configuration 注解该类,等价于 XML 中配置 beans;用 @Bean 标注方法等价于 XML 中配置 bean。例如:

@Configuration  
public class AppConfig {  
    @Bean  
    public UserService userService() {  
        return new UserServiceImpl();  
    }  
}

4.5 @Autowired@Resource

  • @Autowired:按类类型,自动导入依赖的 bean 对象。
  • @Resource:按类名称,自动导入依赖的 bean 对象。例如:
@Service  
public class UserServiceImpl implements UserService {  
    @Autowired  
    private UserRepository userRepository;   // 业务逻辑方法  

}

Spring Boot常用注解

五、Spring Boot 配置管理

5.1 配置文件

Spring Boot 支持多种配置文件格式,如 application.propertiesapplication.ymlapplication.xmlapplication.json 等。默认的配置文件名是 application.properties,也可以使用 YAML 格式的 application.ymlapplication.yaml 进行配置。例如,在 application.yml 中配置服务器端口和数据库连接信息:

server:  
    port: 8080  
spring:  
    datasource:  
        url: jdbc:mysql://localhost:3306/mydb  
        username: root  
        password: password

5.2 配置绑定

可以使用 @ConfigurationProperties 注解将配置文件中的属性绑定到 Java Bean 中。例如:

@Component  
@ConfigurationProperties(prefix = "server")  
public class ServerProperties {  
    private Integer port;   

    public Integer getPort() {  
        return port;  
    }   

    public void setPort(Integer port) {  
        this.port = port;  
    }  
}

5.3 配置加载顺序

Spring Boot 的配置加载遵循一定的规则和优先级顺序,以确保开发者能够灵活地覆盖默认设置或提供环境特定的配置。一般顺序(从低优先级到高优先级)如下:

  1. 默认属性(org.springframework.boot.autoconfigure 中定义)。
  2. 来自 spring.config.import 的属性文件。
  3. 命令行参数(--name = value)。
  4. 来自 SPRING_APPLICATION_JSON 的属性(嵌入在环境中)。
  5. ServletConfig 初始化参数。
  6. ServletContext 初始化参数。
  7. JNDI 属性(java:comp/env)。
  8. Java 系统属性(System.getProperties())。
  9. 操作系统环境变量。
  10. 随机生成的值(通过 random 属性)。
  11. 打包外部配置文件(application.propertiesapplication.yml 文件位于类路径根目录下)。
  12. application - {profile}.propertiesapplication - {profile}.yml 文件位于类路径根目录下,其中 {profile} 是激活的配置文件名称。
  13. 未打包的外部配置文件(application.propertiesapplication.yml 文件位于当前运行目录下)。
  14. application - {profile}.propertiesapplication - {profile}.yml 文件位于当前运行目录下。
  15. @ConfigurationProperties 注解的类。
  16. 通过 SpringApplication.setDefaultProperties 设置的默认属性。
  17. 命令行参数(再次强调,命令行参数拥有最高的优先级)。

Spring Boot配置加载顺序

六、Spring Boot 数据访问

6.1 Spring Data JPA

Spring Data JPA 是 Spring 提供的一个用于简化数据库访问的框架,它基于 JPA 规范,通过定义接口的方式来实现数据库操作。例如:

public interface UserRepository extends JpaRepository<User, Long> {  
    List<User> findByLastName(String lastName); 
  
    @Query("SELECT u FROM User u WHERE u.email = ?1")  
    User findByEmailAddress(String emailAddress);  
}

6.2 事务管理

在 Spring Boot 中,可以使用 @Transactional 注解来管理事务。例如:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @Transactional
    public User updateUser(Long id, User userDetails) {
        User user = userRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("User not found"));           
        user.setFirstName(userDetails.getFirstName());              
        user.setLastName(userDetails.getLastName());
        return userRepository.save(user);
    }
}

6.3 数据库支持

Spring Boot 支持多种数据库,如 MySQL、Oracle、PostgreSQL 等,同时也支持嵌入式数据库,如 H2、HSQLDB 等。可以通过配置数据源和连接池来实现数据库的连接和管理。例如,在 application.yml 中配置 MySQL 数据源:

spring:  
    datasource:  
        url: jdbc:mysql://localhost:3306/mydb  
        username: root  
        password: password  
        driver-class-name: com.mysql.cj.jdbc.Driver

七、Spring Boot Web 开发

7.1 REST 服务开发

在 Spring Boot 中,可以使用 @RestController 注解来开发 RESTful Web 服务。例如:

@RestController  
@RequestMapping("/api/users")  
public class UserController {  
    @Autowired  private UserService userService;  

    @GetMapping  
    public List<User> getAllUsers() {  
        return userService.findAll();  
    }   

    @PostMapping  
    public User createUser(@RequestBody User user) {  
        return userService.save(user); 
     }  

}

7.2 异常处理

可以使用 @ControllerAdvice@ExceptionHandler 注解来实现全局异常处理。例如:

@ControllerAdvice  
public class GlobalExceptionHandler { 
    @ExceptionHandler(ResourceNotFoundException.class)  
    public ResponseEntity<?> resourceNotFoundException(ResourceNotFoundException ex) {          ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage());  
        return new ResponseEntity<>(errorDetails, HttpStatus.NOT_FOUND);  
    }  
}

7.3 静态资源处理

Spring Boot 可以自动处理静态资源,默认情况下,静态资源可以放在 src/main/resources/static 目录下。例如,将 CSS、JS、图片等文件放在该目录下,就可以通过浏览器直接访问。

7.4 模板引擎

Spring Boot 支持多种模板引擎,如 Thymeleaf、FreeMarker、Velocity 等。以 Thymeleaf 为例,在 application.yml 中配置 Thymeleaf:

spring:  
    thymeleaf:  
        cache: false  
        prefix: classpath:/templates/  
        suffix: .html

然后在 src/main/resources/templates 目录下创建 Thymeleaf 模板文件。

八、Spring Boot 安全管理

Spring Boot 可以集成 Spring Security 来实现安全管理,包括认证、授权、会话管理、CSRF 防护等功能。例如,在 pom.xml 中添加 Spring Security 依赖:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-security</artifactId> 
</dependency>

然后创建一个配置类来配置安全规则:

@Configuration  
@EnableWebSecurity  
public class SecurityConfig extends WebSecurityConfigurerAdapter {  

    @Override  
    protected void configure(HttpSecurity http) throws Exception {  
        http.authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();  
    }  
}

九、Spring Boot 监控与管理

9.1 Actuator

Spring Boot Actuator 提供了对应用进行监控和管理的 REST 端点,通过访问这些端点,可以获得应用的健康信息、指标、环境属性等。例如,在 pom.xml 中添加 Actuator 依赖:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-actuator</artifactId>  
</dependency>

然后可以通过访问 /actuator/health 端点来查看应用的健康状态。

9.2 日志管理

Spring Boot 默认使用 SLF4J 作为日志门面,并默认提供了 Logback 作为日志实现。可以通过配置文件调整日志级别、输出格式等。例如,在 application.yml 中配置日志级别:

logging:  
    level:  
        root: INFO  
        com.example.demo: DEBUG

十、Spring Boot 高级特性

10.1 自定义 Starter

通过创建自定义 Starter,可以将常用的配置和依赖打包在一起,方便在多个项目中使用。自定义 Starter 通常包含自动配置类和 Starter 依赖。例如,创建一个自定义的 Redis Starter,需要定义自动配置类和 Starter 依赖。

10.2 热部署

Spring Boot 支持热部署,即在不重启应用的情况下,当代码发生变化时自动重新加载类和资源。可以使用 spring - boot - devtools 模块来实现热部署,在 pom.xml 中添加依赖:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-devtools</artifactId> 
    <scope>runtime</scope>  
    <optional>true</optional>  
</dependency>

10.3 打包与部署

Spring Boot 应用可以使用 Maven 或 Gradle 打包成 JAR 或 WAR 文件,然后部署到服务器上。也可以将应用部署到 Docker 容器中实现容器化部署。例如,使用 Maven 打包成 JAR 文件:

mvn clean package

然后通过 java - jar 命令运行:

java - jar target/demo - 0.0.1 - SNAPSHOT.jar

综上所述,Spring Boot 是一个功能强大、易于使用的 Java 开发框架,它通过自动配置、起步依赖等特性,大大简化了 Spring 应用的开发和部署过程。掌握 Spring Boot 的相关知识点,可以帮助开发者更高效地构建基于 Spring 生态圈的应用。

学习尚硅谷视频整理的文档 Spring Boot 1 1 Spring Boot入门 4 1.1 简介 4 1.2 微服务(martin fowler发表了一篇文章) 5 1.3 环境约束 7 1.4 第一个Spring Boot项目(jar):HelloWorld 8 1.5 入门案例详解 11 1.5.1 POM文件 11 1.5.2 主程序类,主入口类 12 1.6 使用Spring Initializer向导快速创建Spring Boot 16 2 Spring Boot配置 18 2.1 配置文件 18 2.2 YML语法 19 2.3 YML配置文件值获取 21 2.4 properties配置文件乱码问题 24 2.5 @ConfigurationProperties与@Value的区别 25 2.6 配置@PropertySource、@ImportResource、@Bean 27 2.7 配置文件占位符 30 2.8 Profile多环境支持 31 2.9 配置文件的加载位置 33 2.10 外部配置加载顺序 36 2.11 自动配置原理 37 2.12 @Conditional派生注解 41 3 Spring Boot与日志 42 3.1 日志框架分类和选择 42 3.2 SLF4j使用 43 3.3 其他日志框架统一转换成slf4j+logback 44 3.4 Spring Boot日志使用 45 3.5 Spring Boot默认配置 47 3.6 指定日志文件和日志Profile功能 52 3.7 切换日志框架(不使用SLF4j+LogBack) 54 4 Spring Boot与Web开发 55 4.1 Web开发简介 55 4.2 静态资源映射规则 56 4.3 引入Thymeleaf 60 4.4 Thymeleaf语法 61 4.5 SpringMVC自动配置原理 67 4.6 SpringBoot扩展与全面接管 70 4.7 如何修改SpringBoot的默认配置 72 4.8 【实验】CRUD操作 73 4.8.1 默认访问首页 73 4.8.2 登录页面国际化 74 4.8.3 登录 80 4.8.4 拦截器进行登录检查 81 4.8.5 实验要求(没按要求做,不想改了!) 82 4.8.6 CRUD-员工列表 83 4.8.7 CRUD-员工修改 86 4.8.8 CRUD-员工添加 87 4.8.9 CRUD-员工删除 88 4.9 错误处理原理&错误页面定制 90 4.10 配置嵌入式Servlet容器(springboot 1.50版本) 97 4.10.1 如何定制和修改Servelt容器的相关配置 97 4.10.2 注册servlet三大组件【servlet,filter,listener】 98 4.10.3 替换为其他嵌入式容器 102 4.10.4 嵌入式servlet容器自动配置原理 103 4.10.5 嵌入式servlet容器启动原理 103 4.11 使用外置的Servlet容器 104 4.11.1 步骤 104 4.11.2 原理 107 5 Spring Boot与Docker(虚拟化容器技术) 110 5.1 简介 110 5.2 核心概念 111 5.3 安装Docker 112 5.4 Docker常用命令&操作 113 5.5 安装MySQL示例 114 6 Spring Boot与数据访问 115 6.1 JDBC 115 6.1.1 实现 115 6.1.2 自动配置原理 116 6.2 整合Durid数据源 117 6.3 整合Mybatis 122 6.3.1 注解版 123 6.3.2 配置文件版 124 6.4 整合SpringData JPA 125 6.4.1 SpringData简介 125 6.4.2 整合 126 7 Spring Boot启动配置原理 128 7.1 启动流程(Springboot 1.50版本) 128 7.1.1 创建SpringApplication对象 129 7.1.2 运行run方法 130 7.1.3 编写事件监听机制 132 8 Spring Boot自定义starters 136 8.1 概述 136 8.2 步骤 137 9 更多Springboot整合示例 144 10 Spring Boot与缓存 145 10.1 JSR107缓存规范 145 10.2 Spring的缓存抽象 146 10.2.1 基本概念 146 10.2.2 整合项目 146 10.2.3 CacheEnable注解 148 10.2.4 Cache注解 150 10.3 整合redis 154 10.3.1 在Docker上安装redis 154 10.3.2 Redis的Template 154 10.3.3 整合(百度) 155
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值