Spring Boot基础知识

什么是 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 框架的一些建议:

一、掌握基础知识

  1. 理解 Spring 基础
    • Spring Boot 是基于 Spring 构建的,所以要先熟悉 Spring 的核心概念,如控制反转(IoC)和依赖注入(DI)。了解如何通过 Spring 容器管理 Bean,以及 Bean 的生命周期。可以通过学习简单的 Spring 项目,如使用 XML 或 Java 配置来定义 Bean,来加深对这些概念的理解。
    • 例如,在传统 Spring 中,使用 XML 配置一个简单的数据源 Bean:

收起

xml

复制

   
       
       
       
       
   

  • 或者使用 Java 配置类:

收起

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;
       }
   }

  1. 学习 Spring Boot 核心概念

    • 深入理解自动配置(Auto - Configuration)。查看 Spring Boot 的自动配置类,了解它们是如何根据类路径中的依赖和条件来自动配置应用的。
    • 例如,在spring - boot - autoconfigure模块中,可以找到DataSourceAutoConfiguration类。这个类在满足一定条件(如存在相关的数据源依赖)时,会自动配置数据源。它使用了@ConditionalOnClass@ConditionalOnMissingBean等注解来确定是否需要进行配置。
    • 掌握起步依赖(Starter Dependencies)。研究每个起步依赖包含的具体内容,以及它们是如何协同工作的。比如spring - boot - starter - web包含了 Spring MVC、嵌入式服务器(如 Tomcat)等组件,学习如何通过添加不同的起步依赖来构建不同类型的应用,如 Web 应用、数据访问应用等。
  2. 熟悉项目结构和配置文件

    • 仔细研究 Spring Boot 项目的标准结构,包括src/main/javasrc/main/resourcessrc/test/java等目录的用途。
    • 对于配置文件(application.propertiesapplication.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;
       }
   }

二、实践项目开发

  1. 构建简单应用
    • 从简单的 Web 应用开始,如创建一个 RESTful API。使用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)和服务层类,然后在控制器中调用服务层方法来获取和处理数据。

  1. 参考开源项目

    • 寻找一些优秀的 Spring Boot 开源项目进行学习。例如,可以研究 Spring Cloud 项目中的各个微服务组件,它们大量使用了 Spring Boot。通过阅读这些开源项目的代码,可以学习到如何构建大型的、分布式的 Spring Boot 应用,包括服务发现、配置管理、熔断器等高级功能。
    • 还可以查看一些小型的开源 Web 应用或工具项目,了解它们在实际应用中是如何组织代码、处理业务逻辑和进行配置的。
  2. 解决实际问题

    • 参与实际的项目开发或者自己设定一些实际场景的问题来解决。例如,如何在 Spring Boot 应用中实现多数据源的配置和访问,或者如何进行安全认证和授权。通过解决这些实际问题,可以深入了解 Spring Boot 的各种功能和特性,并且学会如何在复杂的场景中灵活运用它们。

三、深入研究相关技术和工具

  1. 数据库访问技术
    • 学习与 Spring Boot 结合使用的数据库访问技术,如 JPA(Java Persistence API)和 MyBatis。对于 JPA,深入理解实体关系映射(ORM)的概念,如何通过 JPA 实现数据的增删改查操作。例如,通过JpaRepository接口可以很方便地进行基本的数据库操作:

收起

java

复制

   import org.springframework.data.jpa.repository.JpaRepository;

   public interface UserRepository extends JpaRepository {
       // 可以在这里定义自定义的查询方法,如根据姓名查找用户
       User findByName(String name);
   }

  • 如果使用 MyBatis,学习如何在 Spring Boot 中集成 MyBatis,包括配置 MyBatis 的映射文件、SQL 语句编写等。

  1. 测试框架
    • 掌握 Spring Boot 应用的测试方法,包括单元测试和集成测试。学习使用 JUnit 和 Mockito 等测试工具。对于单元测试,编写测试用例来验证控制器、服务层和数据访问层等各个组件的功能。例如,使用 JUnit 测试控制器方法:

收起

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!"));
       }
   }

  • 对于集成测试,测试整个应用或者多个组件之间的交互,如测试数据库访问和业务逻辑的集成。

  1. 监控和管理工具
    • 了解 Spring Boot Actuator,它提供了一系列的端点(endpoints)用于监控和管理应用。学习如何配置和使用这些端点,如查看应用的健康状态、获取应用的配置信息等。例如,通过访问/actuator/health端点可以查看应用的健康状况,通过/actuator/metrics端点可以获取应用的各种性能指标。
    • 还可以学习如何与外部的监控工具(如 Prometheus)集成,实现对 Spring Boot 应用的更全面的监控。

你可能感兴趣的:(spring,boot,后端,java)