摘要: 参考:动态数据源切换——@DS 注解源码解析 前言 借助 dynamic-datasource 可实现多数据源读写,其核心注解@DS用来动态切换数据源。 下面介绍@DS注解的实现原理。 如何使用 在 pom 中引入依赖: <!-- spring-boot 1.5.x 2.x.x --> <depen 阅读全文
posted @ 2024-12-18 23:40 Higurashi-kagome 阅读(17) 评论(0) 推荐(0) 编辑
摘要: JDBC 是什么 JDBC 是 Java DataBase Connectivity 的缩写,是由一组用 Java 语言编写的类和接口,用于在 Java 应用程序中与数据库进行交互。 JDBC 只是一套标准规范,具体的实现由各个数据库厂商去实现。对开发者来说其屏蔽了不同数据库之间的区别,可以使用相同 阅读全文
posted @ 2024-12-18 22:05 Higurashi-kagome 阅读(10) 评论(0) 推荐(0) 编辑
摘要: MyBatis 拦截器介绍 MyBatis 提供了一种插件(即 MyBatis 拦截器)机制,可以拦截到 MyBatis 执行流程中的某些操作,从而实现一些特殊的功能。常见的应用场景比如分页、权限控制、日志打印、性能监控等。 MyBatis 拦截器使用 大致分两步: 创建拦截器类:实现Interce 阅读全文
posted @ 2024-12-14 00:55 Higurashi-kagome 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 假定为在单机场景下使用,且为经典的 SpringBoot 项目(用到 SpringBoot、Spring、SpringMVC、MyBatis 等框架) 引入依赖 在 pom.xml 中添加依赖: <dependency> <groupId>org.springframework.boot</grou 阅读全文
posted @ 2024-12-09 21:21 Higurashi-kagome 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 介绍 定义:模板方法模式在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义该算法的某些步骤。 示例: /** * 咖啡因饮料冲泡法 */ public abstract class CaffeineBeverage { /** * 模板 阅读全文
posted @ 2024-12-08 20:11 Higurashi-kagome 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 推荐阅读:策略设计模式 示例 假设有一个支付系统,需要支持使用不同的支付方式(策略),我们可以抽象出一个策略接口,然后定义具体的策略类来实现该接口。 策略接口: public interface PaymentStrategy { void pay(int amount); } 具体策略: publ 阅读全文
posted @ 2024-12-08 15:42 Higurashi-kagome 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 介绍 工厂方法模式定义了一个用于创建对象的接口,由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 在工厂方法模式中,创建对象的工作由具体的工厂类来完成,客户端只需要知道所需产品的具体工厂,而无需关心创建细节。 示例 下面是一个简单的工厂方法模式的示例代码: // 抽象产品类 inte 阅读全文
posted @ 2024-12-07 15:37 Higurashi-kagome 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 介绍 简单工厂模式(又称静态工厂模式):定义一个创建对象的类,由这个类来封装实例化对象的行为。 简单工厂模式应用场景:当我们需要根据传入的参数来动态创建对象时,可以使用简单工厂模式。 简单工厂模式的角色: 工厂类(Creator):负责创建产品的类。在简单工厂模式中,工厂类提供了一个静态方法,根据传 阅读全文
posted @ 2024-12-07 15:27 Higurashi-kagome 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 总结自:一文吃透 Spring Boot 扩展之 BeanFactoryPostProcessor 概述 BeanFactoryPost、Spring 的 BeanDefinitionRegistryPostProcessor 接口详解 什么是 BeanFactoryPostProcessor Be 阅读全文
posted @ 2024-12-02 21:15 Higurashi-kagome 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 原文:如何使用 Spring 的 FactoryBean 接口 在 Spring 容器中有两类的 Bean,一类是普通的 Bean,一类是工厂 Bean。这两种 Bean 都是被 Spring 的容器进行管理的。而 Spring 也提供了一个接口用于扩展工厂 Bean,我们只要实现org.sprin 阅读全文
posted @ 2024-12-01 16:17 Higurashi-kagome 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 推荐阅读:Spring @Import 注解用法、Spring Boot Starter 是什么 @Import 注解用于把实例加入 Spring IOC 容器中。 打开 @SpringBootApplication 注解(Spring Boot 2.6.13 为例),会发现其被 @EnableAu 阅读全文
posted @ 2024-11-30 19:59 Higurashi-kagome 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 基于 Spring Boot Starters 总结 推荐阅读: @Configuration 和 @AutoConfiguration 的区别 @ConfigurationProperties 和 @EnableConfigurationProperties 的作用 Spring Boot Sta 阅读全文
posted @ 2024-11-30 16:52 Higurashi-kagome 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 原文(简单修改):Maven 依赖中的 Scope 详解 scope 元素的作用:控制 dependency 元素的使用范围。通俗的讲,就是控制 jar 包在哪些范围被加载和使用。 compile(默认) compile 是默认值,如果没有指定 scope 值,该依赖的 scope 为 compil 阅读全文
posted @ 2024-11-30 11:08 Higurashi-kagome 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 原文(简单修改):Spring 注解之 @Import 注解的三种使用方式 1、@Import 注解简介 @Import 只能用在类上,用于把实例加入 Spring 的 IOC 容器中。 下面是 @Import 注解的定义,其接收一个 Class 数组类型的参数: @Target(ElementTy 阅读全文
posted @ 2024-11-28 22:05 Higurashi-kagome 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 有时候,我们希望从配置文件中获取一系列配置信息,除了使用@Value注解外,还有一种更好的方式,就是使用@ConfigurationProperties注解。 比如,假设在配置文件中存在如下 OSS 配置信息: spring: oss: enable: true bucket-name: local 阅读全文
posted @ 2024-11-28 20:39 Higurashi-kagome 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 参考:https://stackoverflow.com/a/74117678 @Configuration是一个 Spring 注解,并不严格绑定于 Spring Boot。它的作用是支持以编程方式创建 Spring Bean,以简化 XML 配置。 @AutoConfiguration是 Spr 阅读全文
posted @ 2024-11-27 21:43 Higurashi-kagome 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 原文:如何记忆 Spring Bean 的生命周期 参考:一文读懂 Spring Bean 的生命周期 建议先了解 bean 生命周期涉及到的几个常见接口的基本使用: EnvironmentAware、ApplicationContextAware、InitializingBean、BeanPost 阅读全文
posted @ 2024-11-24 12:59 Higurashi-kagome 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 简介 InitializingBean是 Spring 框架中的一个接口,提供了一种在 bean 完成属性设置后进行自定义初始化的机制。实现这个接口的类可以在 Spring 容器完成 bean 的属性注入后,执行一些初始化逻辑。下面是接口定义: public interface Initializi 阅读全文
posted @ 2024-11-24 10:38 Higurashi-kagome 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 简介 BeanPostProcessor是 Spring 框架中的一个接口,用于在 Spring 容器初始化 bean 之前和之后进行一些自定义操作。它允许开发者对 bean 的实例化过程进行干预,通常用于修改或替换 bean 的属性、执行特定的初始化逻辑等。下面是接口定义: public inte 阅读全文
posted @ 2024-11-24 10:16 Higurashi-kagome 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 简介 HandlerInterceptor 是 Spring MVC 中的一个接口,用于在处理请求之前和之后进行一些操作。它可以用于日志记录、身份验证、权限检查等功能。 以下是 HandlerInterceptor 接口定义: public interface HandlerInterceptor 阅读全文
posted @ 2024-11-23 12:47 Higurashi-kagome 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 问题 写了一个切面来处理被指定自定义注解标注的方法: @Slf4j @Aspect @Component @RequiredArgsConstructor public class MyAnnoAspect { private final HttpServletRequest request; @A 阅读全文
posted @ 2024-11-16 11:38 Higurashi-kagome 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 概念 过滤器即 Servlet 过滤器,参见 Servlet 过滤器入门示例。 拦截器(Interceptor)通常是由特定的框架提供的,不是 Java EE 标准的一部分。 Spring 提供了多种类型的拦截器,如方法拦截器(MethodInterceptor)和控制器拦截器(HandlerInt 阅读全文
posted @ 2024-11-16 10:35 Higurashi-kagome 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 简介及目录结构 Apache Tomcat 是一个 Servlet 容器,是应用(Java)服务器,可在其中部署 Java Web 应用。 Tomcat 的目录结构主要包括以下几个重要的文件夹和文件: apache-tomcat/ ├── bin/ # 启动和停止 Tomcat 的脚本 │ ├── 阅读全文
posted @ 2024-11-16 09:33 Higurashi-kagome 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 推荐阅读: Servlet 简介及入门示例 Tomcat 使用入门 Servlet 过滤器的作用 Servlet 过滤器用于在请求到达 Servlet 之前和响应返回客户端之前对请求和响应进行预处理和后处理。过滤器可以用于: 请求和响应的修改:可以修改请求和响应的内容。 日志记录:记录请求和响应的信 阅读全文
posted @ 2024-11-16 01:32 Higurashi-kagome 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 参考:What is a JavaBean exactly? JavaBean 是遵循以下约定的 Java 类: 所有属性都是私有的(使用 getter/setter)。 有公有的无参数构造函数。 实现 Serializable 接口。 之所以有这样的约定,是因为有一些类库是基于 JavaBean 阅读全文
posted @ 2024-11-07 00:03 Higurashi-kagome 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 原文:看懂 UML 类图和时序图 从一个示例开始 请看以下这个类图,类之间的关系是我们需要关注的: 车的类图结构为<<abstract>>,表示车是一个抽象类; 它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示; 小汽车为与 SUV 之间也是继承关系,它们之间的关系 阅读全文
posted @ 2024-11-06 00:38 Higurashi-kagome 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 原文:ApplicationContextAware 详解用法 当一个类实现了 ApplicationContextAware 接口之后,这个类就可以方便地获得 ApplicationContext 对象(Spring 上下文)。 Spring 容器在创建 Bean 之后,发现 Bean 实现了 A 阅读全文
posted @ 2024-11-02 13:17 Higurashi-kagome 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 参考:Servlet 是用来做什么的?Servlet 技术的特点、ChatGPT 简介 Servlet 是使用 Java 语言编写的运行在服务器端的程序。狭义的 Servlet 是指 Java 语言中的一个接口,广义的 Servlet 是指任何实现了这个 Servlet 接口的类,一般情况下,人们将 阅读全文
posted @ 2024-11-02 11:55 Higurashi-kagome 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 参考: 实现 EnvironmentAware 接口将配置文件中的属性放置到系统环境变量中 EnvironmentAware 接口的作用 EnvironmentAware 接口定义: public interface EnvironmentAware extends Aware { void set 阅读全文
posted @ 2024-11-02 10:59 Higurashi-kagome 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 注:建议先阅读 Java 异常分类 Java 中使用自定义异常类,一般是继承 Exception 或者它的某个子类。如果父类是 RuntimeException 或它的某个子类,则自定义异常也是未受检异常;如果是 Exception 或 Exception 的其他子类,则自定义异常是受检异常。 Ja 阅读全文
posted @ 2024-10-31 23:09 Higurashi-kagome 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 总结自:《Java 核心技术第 10 版》 下图是 Java 异常层次结构图: 所有的异常都是由 Throwable 继承而来(注意 Throwable 是类而不是接口),Error 和 Exception 是 Throwable 的直接子类。 Error 类用于描述 Java 运行时系统的内部错误 阅读全文
posted @ 2024-10-31 23:06 Higurashi-kagome 阅读(23) 评论(0) 推荐(0) 编辑
摘要: SLF4J MDC(Mapped Diagnostic Context)可以帮助在日志中添加上下文信息,从而更好地跟踪和调试应用程序。MDC 允许你将特定于线程的键值对存储在日志上下文中,便于在日志中输出相关信息。 使用步骤 添加依赖:确保你的项目中已经包含了 SLF4J 和相关的日志实现(如 Lo 阅读全文
posted @ 2024-10-27 16:48 Higurashi-kagome 阅读(55) 评论(0) 推荐(0) 编辑
摘要: 基于:SLF4J 框架源码中是如何实现双重锁的? 当我们使用 SLF4J 时,通常通过如下代码获取对应的 Logger: Logger logger = LoggerFactory.getLogger(NoBindingTest.class); 在 LoggerFactory 的 getLogger 阅读全文
posted @ 2024-10-26 13:50 Higurashi-kagome 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 原文:Java 单例模式的 7 种写法中,为何用 Enum 枚举实现被认为是最好的方式? 1、懒汉(线程不安全) public class Singleton { private static Singleton instance; private Singleton() {} // 私有构造函数 阅读全文
posted @ 2024-10-26 13:06 Higurashi-kagome 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 什么是适配器模式 适配器模式中,适配器包装不兼容指定接口的对象,来实现不同兼容指定接口。 SLF4J 中的适配器模式 SLF4J 是一个日志门面系统,其中提供了统一的 Logger 等接口,许多框架都会面向 SLF4J 打印日志,这样就不会和具体的日志框架耦合在一起,框架使用者也就能够很方便地在不同 阅读全文
posted @ 2024-10-26 11:34 Higurashi-kagome 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 总结自:《Head First 设计模式》 简介 适配器的作用是使原本两个不兼容的系统能够兼容起来,比如电源转接口就是一种适配器: 示例 假设有一个 Duck(鸭子)接口,其中有 quack(呱呱叫)和 fly 方法: public interface Duck { void quack(); vo 阅读全文
posted @ 2024-10-26 10:05 Higurashi-kagome 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 基于以下内容总结:从门面模式到 Slf4j、10 分钟讲清楚 Java SLF4J,Java 日志框架的扛把子,从原理到实践 写后端接口的时候,先写一个 Service 接口,这个 Service 接口的实现中可能会调用多个其他 Service 或 Mapper 方法来实现某个业务,对于 Contr 阅读全文
posted @ 2024-10-25 23:22 Higurashi-kagome 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 原文:Java SPI 机制详解 在面向对象的设计原则中,一般推荐模块之间基于接口编程,通常情况下调用方模块是不会感知到被调用方模块的内部具体实现。一旦代码里面涉及具体实现类,就违反了开闭原则。如果需要替换一种实现,就需要修改代码。 为了实现在模块装配的时候不用在程序里面动态指明,这就需要一种服务发 阅读全文
posted @ 2024-10-25 23:21 Higurashi-kagome 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 原文:一个著名的日志系统是怎么设计出来的 1 前言 Java 帝国在诞生之初就提供了集合、线程、IO、网络等常用功能,从 C 和 C++ 领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略了一个重要的功能:输出日志。 对于这一点,IO 大臣其实非常清楚,日志是个很重要的东西,因为程序运行起来以后 阅读全文
posted @ 2024-10-23 23:32 Higurashi-kagome 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 总结自:BV15k4y1k7Ep 简介 一般在开发过程中,通过如下步骤在 SpringBoot 项目中集成 RabbitMQ: 生产者工程: application.yml 文件配置 RabbitMQ 相关信息; 在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定; 注入 RabbitTem 阅读全文
posted @ 2024-10-19 15:58 Higurashi-kagome 阅读(8) 评论(0) 推荐(0) 编辑