Spring Boot part20-事件驱动开发
事件驱动开发
简介
在现代应用程序开发中,事件驱动架构(EDA)越来越受欢迎。它不仅可以提高系统的解耦性,还能提升系统的可扩展性和响应速度。Spring
Boot
中的事件驱动开发是一种解耦业务逻辑的设计模式,核心思想是:通过
“事件发布 - 监听”
机制,让不同组件在不直接依赖的情况下协作。
事件驱动开发是一种软件架构模式,系统通过事件来进行通信和协调。事件可以是系统中发生的任何有意义的事情,如用户点击按钮、数据更新等。事件驱动架构的核心思想是将事件的发布者和事件的处理者解耦,通过事件总线来传递事件。这样可以使得系统更加灵活,易于扩展和维护。
Spring Boot中的事件模型基于 Spring Framework 的 ApplicationEvent 和
ApplicationListener。ApplicationEvent
是所有事件的基类,ApplicationListener
是所有事件监听器的接口。我们可以自定义事件并发布,自定义监听器来处理这些事件。
简单说,事件驱动开发是用 “事件” 作为业务流程的
“粘合剂”,让不同组件在...
Spring Boot part19-生命周期监听与9大事件
观察者模式
观察者模式是一种行为设计模式,它定义了对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个模式中,改变状态的对象被称为主题,依赖的对象被称为观察者。
举个实际的例子:
事件源(Event
Source):可以视为“主题(Subject)”,当其状态发生变化时(比如播放新的内容),会通知所有的观察者。想象我们正在听广播,广播电台就是一个事件源,它提供了大量的新闻、音乐和其他内容。
事件(Event):这是主题状态改变的具体表示,对应到广播例子中,就是新闻、音乐和其他内容。每当电台播放新的内容时,就相当于一个新的事件被发布了。
广播器(Event Publisher...
Spring Boot part18-整合JUnit5进行测试
Spring Boot 整合 JUnit5
进行单元测试
SpringBoot 提供⼀系列测试⼯具集及注解⽅便我们进⾏测试。
Spring Test 与
JUnit等其他测试框架结合起来,提供了便捷高效的测试手段。而 Spring Boot
Test 是在 Spring Test 之上的再次封装,增加了切片测试,增强了 mock
能力。
spring-boot-test提供核⼼测试能⼒,spring-boot-test-autoconfigure提供测试的⼀些⾃动配置
我们只需要导⼊ spring-boot-starter-test 即可整合测试
12345<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope></dependency>
Spring...
Spring Boot part17-外部化配置
外部化配置
什么是外部化配置
在软件开发中,外部化配置指的是将应用程序的配置信息(如环境参数、连接地址、业务开关等)与代码逻辑分离,存储在外部资源中(如配置文件、环境变量、数据库等)。Spring
Boot
的外部化配置机制并非凭空产生,而是源于软件开发中一系列实际需求的驱动
Spring Boot 外部化配置 (Externalized Configuration)
提供了一套强大的机制,允许我们将应用的配置
从代码中解耦出来,并通过多种外部来源进行灵活管理,从而打造出
可移植、可扩展、易于维护 的 Spring Boot...
Spring Boot part16-Profile环境隔离
什么是Profiles
介绍
随着软件开发变得越来越复杂,应用程序往往需要在不同的环境中运行,比如开发、测试、生产等。每个环境可能对配置有不同的需求。手动管理这些差异化的配置不仅容易出错,而且效率低下。为了解决这个问题,Spring框架引入了Profiles的概念,它允许开发者根据不同的环境来激活特定的配置设置。
Spring Profiles
是Spring框架提供的一种机制,用来解决多环境配置问题。通过定义不同的profiles,可以在同一套代码库中针对不同的运行时环境(如开发、测试、生产)指定不同的配置属性,这样就提供了一种方式允许我们指定在特定环境下只加载对应的程序配置,每一种环境配置对应一个
Profile,只有当前 Profile 处于激活状态时,才会将该 Profile
所对应的配置和 Bean 加载到 Spring
程序中。这样做的好处是能够保持代码的一致性,同时又能灵活地适应各种环境的变化。
Spring Profiles
就是针对应用程序,不同环境需要不同配置加载的一种解决方案。
Profile 的概念其实很早在 Spring...
快速上手H2数据库进行开发
前言
H2 是一个用 Java
编写的开源关系数据库,特别适合作为嵌入式数据库和内存数据库使用。
针对其特性,我不会太深入讲解什么其他跟原理和很细节方面的东西,本文旨在让大家快速理解什么是内存数据库以及如何使用内存数据库快速进行开发。
什么是内存数据库
内存数据库(In-Memory
Database,IMDB)是一种将数据完全存储在计算机内存中的数据库系统。与传统磁盘数据库不同,它跳过了磁盘
I/O
操作,直接通过内存读写数据,因此具备毫秒级响应速度和高并发处理能力。其核心优势在于:
速度优势:内存访问速度(纳秒级)比磁盘(毫秒级)快
3-4 个数量级,适合实时分析、高频交易等场景。
架构简化:无需复杂的磁盘缓存机制,数据结构设计更贴近内存特性(如哈希表、索引树)。
内存计算融合:数据与计算逻辑在内存中直接交互,减少数据搬运开销。
数据存储与持久化
主要存储在内存:数据加载到内存中运行,减少...
Spring Boot part15-SpringApplication的基础特性及其原理
SpringApplication的基础特性
在 Spring Boot 生态中,SpringApplication
是启动应用的核心类,它封装了繁杂的启动流程,让开发者能以简洁方式启动应用,同时还提供了丰富可扩展点,助力定制化需求实现。
在这里我会先讲基础特性,然后会再将一些 SpringApplication
的基础原理
自定义 banner
什么是 banner
banner 是 Spring Boot
应用启动时,在控制台打印的一段字符图案或文字信息,默认是 Spring Boot
标志性图案。它虽不影响应用功能,却能成为应用独特
“名片”,用于展示团队文化、应用名称等个性化内容。
image-20250613165542529
这个就是 banner
这个东西是可以自定义的
如何自定义 banner
在类路径(一般是 src/main/resources 目录)下添加
banner.txt 文件,Spring Boot 启动时会自动加载该文件内容作为
banner 显示。可借助在线工具(如文中提到的 Spring Boot...
关于C#中的委托机制的讲解
C# 委托机制深度解析与实战指南
一、委托的本质与核心概念
委托(Delegate) 是 C#
中实现回调机制的核心特性,本质上是一种引用方法的类型安全对象。与 C++
函数指针相比,委托具有以下优势:
类型安全:委托实例必须匹配方法的签名(参数类型、返回类型)
面向对象封装:委托是派生自System.Delegate的类实例
多播能力:一个委托实例可引用多个方法
跨应用域调用:支持在不同应用域间传递方法引用
委托的核心组成部分:
签名定义:指定参数列表和返回类型
目标方法:委托引用的具体方法(静态方法或实例方法)
调用逻辑:通过委托实例调用时执行目标方法
二、委托的基础用法详解
1. 委托的声明与类型匹配规则
1234567891011// 声明一个返回int、接收两个int参数的委托public delegate int MathOperation(int a, int b);// 符合该委托签名的方法public static int Add(int x, int y) => x + y;public static...
使用MapStruct进行对象转换,及其中对象转换注解的使用
理解 @Mapper 注解的核心功能
@Mapper 注解是现代 Java
开发中用于简化对象转换的重要工具,最著名的实现是 MapStruct 框架,它是
Java
中最流行的对象映射框架。它的设计理念是通过编译时代码生成来替代传统的反射机制,从而实现高性能的对象映射转换。
所以,我们从 MapStruct 使用来讲 @Mapper
注解的使用及其对象转换方案。
MapStruct
是一个代码生成器,它的主要功能是在编译时根据注解配置自动生成高性能的映射实现代码,避免了手写转换代码的繁琐和运行时反射的性能损耗。这个工具基于“约定优于配置”的原则,极大地简化了
Java Bean 类型之间的映射实现过程。
在多层架构的应用中,经常需要在不同的对象模型之间进行转换,例如在持久层的实体和传输层的
DTO(Data Transfer
Object,数据传输对象)之间。手动编写这种映射代码是一项繁琐且容易出错的任务。MapStruct通过自动化的方式解决了这个问题,它可以在编译时生成映射代码,从而保证了高性能、快速的开发反馈以及严格的错误检查。
@Mapper...
三大自动注入相关注解的分析和对比
自动注入相关注解
@Autowired
在使用Spring进行项目开发的时候,会大量使用到自动装配,那自动装配是什么呢?简单来说:Spring
利用依赖注入(DI)功能,完成SpringIOC容器中各个组件之间的依赖关系赋值管理。
@Autowired
是一个Spring框架的原生注解,它可以对类成员变量、方法及构造函数进行标注,让
spring 完成 bean 自动装配的工作,是 Spring
框架中用于实现依赖注入(Dependency Injection, DI)
的关键注解
自动将容器中已创建的 Bean 注入到当前 Bean 的字段、构造方法或
setter 方法中
避免手动创建对象,实现松耦合的组件协作
遵循 “控制反转(IoC)” 原则,让容器管理对象生命周期
使用@Autowired 时候,容器启动的扫描流程如下:
Spring容器在启动时会自动扫描并管理所有带有
@Component、@Service、@Repository
和 @Controller...
Spring Boot part14-数据访问之整合SSM场景及其自动配置原理
Spring Boot 3 整合 SSM
场景进行数据访问
熟悉 SSM 框架
SSM 框架简介
SSM 框架是 Spring、Spring MVC 和 MyBatis 三个框架的整合,是 Java
企业级开发中经典的技术栈组合。其中:
Spring
提供了依赖注入(DI)和面向切面编程(AOP)等核心功能,用于管理对象生命周期和业务逻辑分层
Spring MVC 是基于 MVC 设计模式的 Web
框架,负责处理 Web 请求和响应
MyBatis 是持久层框架,用于实现数据库操作的 ORM
映射
Spring Boot 3 整合 SSM 的优势很明显
Spring Boot 3 对 SSM 框架的整合带来了以下核心优势:
自动化配置:通过 Starter 依赖自动配置
Spring、Spring MVC 和 MyBatis 的基础环境
简化部署:内置 Tomcat 等容器,可直接打包为可执行
JAR
性能优化:基于 Spring 6 的响应式编程模型,支持
Reactive Stream
微服务支持:天然适配...
Spring Boot part13-全面接管Spring MVC
全面接管 SpringMVC 的思路
SpringBoot 默认配置好了 SpringMVC 的所有常⽤特性。
在 SpringBoot 中,全面接管 SpringMVC
配置的思路是通过禁用默认配置并完全自定义所有 MVC
行为。这是一个高级用法,适用于需要对 SpringMVC 进行深度定制的场景。
全面接管 SpringMVC 的核心步骤如下:
创建一个配置类,实现WebMvcConfigurer接口
使用@EnableWebMvc注解禁用 SpringBoot 的默认 MVC
配置
重写WebMvcConfigurer接口中的方法来定义所有需要的 MVC
行为,WebMvcConfigurer组件定义MVC的底层行为
回忆一下配置类的三种自定义方式
全自动
直接编写控制器逻辑
全部使用自动配置默认效果
手自一体
@Configuration + 配置 WebMvcConfigurer +
配置...
Spring Boot part12-嵌入式容器
前言
Spring Boot
的目标是构建“非常容易创建、独立、产品级别的基于Spring的应用”。这些应用是“立即可运行的”。在这个过程中,完全没有代码生成,不需要配置任何特殊的XML配置,为了这个目标,Spring
Boot 在 Spring 4.0
框架之上提供了很多特性,帮助应用以“约定优于配置”“开箱即用”的方式来启动应用并运行上下文。
Spring Boot 同样改变了一个传统的 Web
应用服务的启动流程和部署方式。通过自动配置机制,Spring Boot
提供了一个嵌入式的运行时容器环境,并使用代码注解的方式在代码中将 URL
服务地址映射到 Controller 的方法完成服务映射。
所以,开发者不再需要关心传统容器(如
Tomcat)中web.xml的配置,同时实现容器的具体技术都是可替换及可更改的,这些技术以插件化的Starter组件方式在运行时加载到
Spring...
















