#SpringBoot学习

SpringBoot

Springboot是什么?

Spring Boot 是由 Pivotal 团队提供的基于 Spring 框架的快速开发脚手架,通过少量的配置,快速实现一个完整的 Spring 应用。(Spring工具箱,实现快速开箱即用)

SpringBoot能够做什么?

简化项目配置

自动配置 Spring 和第三方库,减少 XML 配置文件的编写。
提供 application.properties 或 application.yml 文件来集中管理配置。

快速开发微服务

内置支持多种微服务架构组件,如 Eureka、Zuul、Hystrix 等。
支持 RESTful API 的快速开发和部署。

集成多种数据存储

支持关系型数据库(如 MySQL、PostgreSQL)和 NoSQL 数据库(如 MongoDB、Redis)。
提供 JPA、MyBatis 等 ORM 框架的集成支持。

简化 Web 开发

内嵌 Tomcat、Jetty 或 Undertow 服务器,使应用可以独立运行。
支持 Thymeleaf、Freemarker 等模板引擎,方便前端页面开发。

提供生产就绪功能

健康检查、外部化配置、度量监控等功能,帮助开发者构建可维护的应用。
支持日志管理和性能监控。

简化测试

提供强大的测试支持,包括单元测试和集成测试。
支持 MockMvc 进行 Web 层的测试。

支持多种部署方式

可以将应用打包成 JAR 或 WAR 文件,方便部署。
支持 Docker 容器化部署,以及云平台部署(如 AWS、Azure、Google Cloud)。

简化安全控制

集成 Spring Security,提供身份认证和授权功能。
支持 OAuth2、JWT 等安全协议。

支持消息队列

集成 RabbitMQ、Kafka 等消息中间件,支持异步通信和消息处理。

SpringBoot能给我带来什么好处?

提高开发效率,降低开发成本

简化配置

自动配置:Spring Boot 通过自动配置机制,为常见的开发场景提供了默认配置,减少了繁琐的 XML 配置文件编写工作。
集中管理配置:使用 application.properties 或 application.yml 文件集中管理应用配置,便于维护和修改。

快速启动和开发

开箱即用:提供了大量 starter 依赖,方便开发者快速集成各种功能模块,如数据库访问、缓存、安全控制等。
内嵌服务器:内嵌了 Tomcat、Jetty 或 Undertow 服务器,使应用可以独立运行,无需外部部署,加快了开发和测试的速度。

提高开发效率

代码生成:提供了多种代码生成工具和模板,减少重复代码的编写。
热部署:支持热部署功能,可以在不重启应用的情况下更新代码,提高开发效率。

生产就绪功能

健康检查:内置健康检查功能,帮助监控应用的运行状态。
外部化配置:支持从外部文件或环境变量读取配置,便于不同环境下的配置管理。
度量监控:提供度量监控功能,帮助开发者了解应用的性能和资源使用情况。
日志管理:支持多种日志框架,方便日志记录和分析。

微服务支持

微服务架构:内置支持多种微服务架构组件,如 Eureka、Zuul、Hystrix 等,方便构建和管理微服务应用。
服务发现:支持服务发现和注册,便于微服务之间的通信和协调。
断路器:提供断路器功能,增强系统的容错性和稳定性。

集成多种数据存储

关系型数据库:支持 MySQL、PostgreSQL 等关系型数据库,提供 JPA、MyBatis 等 ORM 框架的集成支持。
NoSQL 数据库:支持 MongoDB、Redis 等 NoSQL 数据库,满足不同的数据存储需求。

简化 Web 开发

RESTful API:支持 RESTful API 的快速开发和部署,适合现代 Web 应用和移动应用的后端开发。
模板引擎:支持 Thymeleaf、Freemarker 等模板引擎,方便前端页面开发。

简化测试

单元测试:提供强大的测试支持,包括单元测试和集成测试。
MockMvc:支持使用 MockMvc 进行 Web 层的测试,方便验证控制器逻辑。
测试工具:集成 Testcontainers 等测试工具,方便进行集成测试和端到端测试。

支持多种部署方式

JAR/WAR 包:可以将应用打包成 JAR 或 WAR 文件,方便部署。
容器化部署:支持 Docker 容器化部署,便于在云平台上运行和管理应用。
云平台支持:支持多种云平台(如 AWS、Azure、Google Cloud),方便云原生应用的开发和部署。

安全控制

集成 Spring Security:提供身份认证和授权功能,支持多种安全协议。
OAuth2 和 JWT:支持 OAuth2、JWT 等安全协议,增强应用的安全性。

消息队列支持

消息中间件:集成 RabbitMQ、Kafka 等消息中间件,支持异步通信和消息处理。
事件驱动架构:支持事件驱动架构,提高系统的响应速度和可扩展性。

社区和生态系统

活跃社区:Spring Boot 拥有庞大的开发者社区,提供了丰富的文档、教程和插件。
生态系统:与 Spring 生态系统高度集成,可以轻松使用 Spring Framework 的其他模块和功能。

SpringBoot如何使用?

创建 Spring Boot 项目

使用 Spring Initializr
Spring Initializr 是一个 web 工具,可以帮助你快速生成 Spring Boot 项目的初始结构。你可以通过以下步
骤创建项目:

  1. 访问 Spring Initializr:

    打开浏览器,访问 Spring Initializr。

  2. 选择项目配置:

    Project:选择 Maven 或 Gradle 项目。
    Language:选择 Java、Kotlin 或 Groovy。
    Spring Boot:选择 Spring Boot 版本。
    Project Metadata:填写 Group、Artifact、Name 等信息。
    Packaging:选择 Jar 或 War。
    Java Version:选择 Java 版本。
    Dependencies:添加所需的依赖,如 Web、JPA、Thymeleaf 等。

  3. 生成项目:

    点击 “Generate” 按钮,下载生成的项目压缩包。
    解压下载的文件,导入到你喜欢的 IDE 中(如 IntelliJ IDEA、Eclipse)。

项目目录结构

my-spring-boot-app/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/demo/
│   │   │       └── DemoApplication.java
│   │   └── resources/
│   │       ├── application.properties
│   │       └── static/
│   │       └── templates/
│   └── test/
│       ├── java/
│       │   └── com/example/demo/
│       │       └── DemoApplicationTests.java
├── pom.xml (Maven) 或 build.gradle (Gradle)
└── .gitignore

代码编写

添加SpringBoot依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.5</version> <!-- 选择你需要的版本 -->
    <relativePath/> <!-- lookup parent from repository -->
</parent>
plugins {
    id 'org.springframework.boot' version '2.7.5' // 选择你需要的版本
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

主应用程序类
Spring Boot 应用程序的入口点通常是带有 @SpringBootApplication 注解的主类。例如:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

控制器
创建一个简单的 REST 控制器来处理 HTTP 请求:


package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

配置应用

在 src/main/resources/application.properties 文件中配置应用的属性。例如:

server.port=8080
spring.application.name=demo-app

常用注解

1. 核心注解

@SpringBootApplication
作用:这是一个组合注解,包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan。

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

@Configuration
作用:标记一个类为配置类,该类中的方法可以用 @Bean 注解来定义 Spring 管理的 Bean。

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

@ComponentScan
作用:扫描指定包及其子包下的组件(如 @Component、@Service、@Repository、@Controller 等)。

@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
2. 组件注解

@Component
作用:通用的组件注解,标记一个类为 Spring 管理的 Bean。

@Component
public class MyComponent {
}

@Service
作用:标记一个类为服务层组件。

@Service
public class UserService {
}

@Repository
作用:标记一个类为数据访问层组件。

@Repository
public class UserRepository {
}

@Controller
作用:标记一个类为控制器层组件,通常用于处理 HTTP 请求。

@Controller
public class UserController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

@RestController
作用:组合注解,包含了 @Controller 和 @ResponseBody,用于创建 RESTful 控制器。

@RestController
public class UserController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}
3. 注入注解

@Autowired
作用:自动注入依赖,可以用于字段、构造函数、方法等。

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

@Value
作用:从配置文件中注入值。

@Service
public class UserService {
    @Value("${app.name}")
    private String appName;
}
4. 配置注解

@Bean
作用:定义一个 Bean,通常用于配置类中的方法。

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

@Profile
作用:指定 Bean 在哪些环境中生效。

@Configuration
@Profile("dev")
public class DevConfig {
    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder().build();
    }
}
5.条件注解

@ConditionalOnClass
作用:当类路径中存在指定类时,才应用该配置。

@Configuration
@ConditionalOnClass(Tomcat.class)
public class TomcatConfig {
}

@ConditionalOnMissingBean
作用:当容器中不存在指定 Bean 时,才应用该配置。

@Configuration
@ConditionalOnMissingBean(DataSource.class)
public class DefaultDataSourceConfig {
    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder().build();
    }
}

@ConditionalOnProperty
作用:当配置文件中存在指定属性且值符合要求时,才应用该配置。

@Configuration
@ConditionalOnProperty(name = "app.enabled", havingValue = "true")
public class AppEnabledConfig {
}
6.其他注解

@RestControllerAdvice
作用:全局异常处理,通常用于处理控制器层的异常。

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
}

@RequestMapping
作用:映射 HTTP 请求到控制器的方法。

@RestController
public class UserController {
    @GetMapping("/users")
    public List<User> getUsers() {
        return userService.getAllUsers();
    }

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

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping
作用:分别映射 GET、POST、PUT、DELETE 请求。

@RestController
public class UserController {
    @GetMapping("/users")
    public List<User> getUsers() {
        return userService.getAllUsers();
    }

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

SpringBoot的实现原理是什么?

Spring Boot 的实现原理涉及多个方面,主要包括自动配置、起步依赖(Starter Dependencies)、内嵌服务器、生产就绪功能等。

1.自动配置(Auto-Configuration)

原理
  1. 条件注解:Spring Boot 使用一系列的条件注解(如 @ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty 等)来决定是否应用某个配置。
  2. 自动配置类:Spring Boot 在类路径中查找带有 @EnableAutoConfiguration 注解的类,并加载相应的自动配置类。
  3. 默认配置:自动配置类提供了许多默认配置,这些配置会根据类路径中的依赖和应用的配置文件(如 application.properties)进行调整。
示例

假设你的项目中添加了 spring-boot-starter-web 依赖,Spring Boot 会自动配置一个内嵌的 Tomcat 服务器和一些常用的 Web 组件。

@Configuration
@ConditionalOnClass({ Servlet.class, Tomcat.class })
@ConditionalOnMissingBean(type = "org.springframework.boot.web.servlet.ServletWebServerFactory")
public class TomcatWebServerAutoConfiguration {
    // 配置 Tomcat 服务器
}

2. 起步依赖(Starter Dependencies)

原理
  1. 简化依赖管理:Spring Boot 提供了一系列的 starter 依赖,每个 starter 依赖都包含了特定功能所需的所有依赖。
  2. 统一版本管理:通过 spring-boot-dependencies BOM(Bill of Materials),Spring Boot 管理了所有依赖的版本,避免了版本冲突。
示例

在 pom.xml 中添加 spring-boot-starter-web 依赖:

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

这个依赖会自动引入 Tomcat、Spring MVC 等相关依赖。

3. 内嵌服务器

原理
  1. 内嵌服务器:Spring Boot 支持内嵌的 Tomcat、Jetty 和 Undertow 服务器,这些服务器可以在应用启动时自动运行,无需外部部署。
  2. 自动配置:Spring Boot 会根据类路径中的依赖自动配置内嵌服务器。
示例

在 pom.xml 中添加 spring-boot-starter-web 依赖,Spring Boot 会自动配置内嵌的 Tomcat 服务器。

4. 生产就绪功能

原理
  1. 健康检查:Spring Boot 提供了 /actuator/health 端点,用于检查应用的健康状态。
  2. 外部化配置:支持从外部文件(如 application.properties)或环境变量读取配置。
  3. 度量监控:提供 /actuator/metrics 端点,用于监控应用的性能和资源使用情况。
  4. 日志管理:支持多种日志框架,如 Logback、Log4j2 等。
示例

在 application.properties 中配置健康检查:

management.endpoints.web.exposure.include=health,info

5. 主应用程序类

原理

@SpringBootApplication 注解:这是一个组合注解,包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan。
SpringApplication.run 方法:启动 Spring 应用上下文,并加载所有配置。

示例

主应用程序类:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

6. 配置文件

原理

application.properties 或 application.yml:用于集中管理应用的配置。
多环境配置:支持多环境配置文件,如 application-dev.properties、application-prod.properties。

示例

application.properties 文件:

server.port=8080
spring.application.name=demo-app

7. 启动流程

原理

SpringApplication 类:负责启动 Spring 应用上下文。
SpringApplication.run 方法:执行以下步骤:

  1. 加载配置:从 application.properties 或 application.yml 文件中加载配置。
  2. 初始化上下文:创建 ApplicationContext 实例。
  3. 注册监听器:注册 ApplicationListener 监听器。
  4. 加载自动配置:根据类路径中的依赖加载自动配置类。
  5. 启动应用:启动应用,包括内嵌服务器(如果有的话)。

8. 生态系统集成

原理

Spring Framework:Spring Boot 基于 Spring Framework,利用其强大的 IoC 容器和 AOP 功能。
其他框架:Spring Boot 集成了许多其他框架和库,如 MyBatis、Hibernate、RabbitMQ 等,提供了开箱即用的支持。

SpringBoot总结

Spring Boot 通过自动配置、起步依赖、内嵌服务器等特性,极大地简化了 Spring 应用的开发和部署过程。它不仅提高了开发效率,还提供了丰富的生产就绪功能,使得开发者能够更加专注于业务逻辑的实现。无论是小型项目还是大型企业应用,Spring Boot 都是一个非常优秀的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值