Spring Boot part21-自定义starter
自定义 starter
SpringBoot Starter 场景机制
Spring Boot Starter 是一种简化 Spring Boot
应用开发的机制,它可以通过引入一些预定义的依赖和配置,让我们快速地集成某些功能模块,而无需繁琐地编写代码和配置文件。应用者只需要在maven中引入
starter 依赖,Spring Boot
就能自动扫描到要加载的信息并启动相应的默认配置。
starter 让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。Spring
Boot 会自动通过 classpath 路径下的类发现需要的
Bean,并注册进IOC容器。Spring Boot 提供了针对日常企业应用研发各种场景的
spring-boot-starter
依赖模块。所有这些依赖模块都遵循着约定成俗的默认配置,并允许我们调整这些配置,即遵循“约定大于配置”的理念。
Spring Boot...
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...