- 博客(246)
- 收藏
- 关注
原创 Java分层开发必知:PO、BO、DTO、VO、POJO概念详解
在Java企业级开发中,POJO、PO、DTO、BO、VO等对象概念常让开发者困惑。PO(持久化对象)与数据库表一一对应,用于数据持久化操作;BO(业务对象)封装业务逻辑,可包含多个PO;DTO(数据传输对象)用于不同层之间的数据传输,支持序列化;VO(视图对象)用于前端展示,避免暴露敏感字段;POJO是所有简单Java对象的统称。这些对象在项目中各有其应用场景和特点,合理使用它们能有效实现解耦、提高灵活性和安全性。通过统一团队规范,选择合适的对象类型,可以提升代码的可读性和可维护性。
2025-05-12 08:00:00
1960
271
原创 MapStruct从入门到精通:Java对象映射的终极指南
Data@Data在Mapper中定义默认方法实现复杂逻辑@Mapperreturn dto;MapStruct通过其优雅的设计和强大的功能,显著提升了Java对象映射的效率。结合编译时安全检查和灵活的自定义能力,它是现代Java工程中不可或缺的工具。
2025-04-21 09:00:00
1145
400
原创 SpringBoot条件注解全解析:核心作用与使用场景详解
Spring Boot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键。通过合理组合这些注解,可以实现“智能”的自动配置逻辑,同时避免冗余代码。实际开发中,建议结合Spring Boot的自动配置源码(如模块)深入学习。
2025-04-14 08:30:00
3760
340
原创 EasyExcel导出自动回显中文,读取自动转换码值(基于全局转换器与自定义注解)
用于标记需要转换的字段,指定码表类型/*** 码表类型(如 trans_status)*/通过自定义注解和全局转换器,实现了码值与中文的动态转换,代码简洁且易于扩展。这里可以结合之前写的文章EasyExcel自定义下拉注解的三种实现方式实现下拉框选择,进一步提升用户体验。
2025-04-01 17:30:21
1869
391
原创 Spring组件初始化扩展点:BeanPostProcessor
在Spring框架中,是一个强大的扩展接口,允许开发者在Bean初始化的过程中插入自定义逻辑。它是Spring IoC容器生命周期管理的核心机制之一,广泛应用于属性注入AOP代理监控等场景。理解的工作机制,能够帮助开发者更灵活地定制Spring容器的行为。是Spring框架中扩展容器功能的利器,通过介入Bean的生命周期,开发者可以实现高度定制化的逻辑。无论是框架本身的底层实现(如AOP、事务管理),还是业务层的通用增强(如日志、审计),都离不开这一机制的灵活支持。
2025-03-17 10:51:15
2951
475
原创 Spring组件实例化扩展点:InstantiationAwareBeanPostProcessor
是 Spring 生命周期中的一个关键扩展接口,继承自。它在 Bean 的实例化阶段拦截 Bean 的实例化过程,甚至完全自定义实例化逻辑在属性填充(依赖注入)前后执行自定义操作动态修改 Bean 的定义或属性值,实现更灵活的控制与普通的不同,该接口的关注点集中在 Bean 的实例化阶段,而非初始化阶段(如或为 Spring Bean 的生命周期提供了深度的扩展能力,尤其在实例化阶段和属性注入阶段。通过合理利用其回调方法,开发者可以实现高度定制化的 Bean 管理逻辑,如动态代理、属性加密、依赖注入扩展等。
2025-03-10 10:16:01
2996
414
原创 IDEA中Git版本回退终极指南:Reset与Revert双方案详解
作为开发者,代码版本回退是日常高频操作。集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择困惑。本文将解析Reset与Revert两种方案的操作细节及避坑指南。Reset通过移动HEAD指针直接回退,适用于本地或强制同步远程,Revert通过生成新的提交逆向撤销,适合团队协作并保留历史记录;根据需求选择合适方式并谨慎操作。
2025-03-03 07:30:00
6274
361
原创 Spring注册修改Bean定义扩展点:BeanFactoryPostProcessor与BeanDefinitionRegistryPostProcessor
BeanDefinitionRegistryPostProcessor示例@Override// 动态注册Bean@Override// 修改已有Bean定义和是Spring容器扩展机制的核心接口,二者分别在修改已有Bean定义和动态注册新Bean的场景下发挥着关键作用。
2025-02-26 07:30:00
2603
356
原创 SpringBoot源码解析(十一):准备应用上下文
在前文中,我们介绍了应用上下文的构造方法初始化两个组件:注解Bean定义读取器和类路径Bean定义扫描器,接下来,我们将探究下准备应用上下文阶段对外的扩展点。SpringBoot版本2.7.18SpringApplication的run方法的执行逻辑如下,本文将详细介绍第8小节:刷新上下文// SpringApplication类方法// 记录应用启动的开始时间// 1.创建引导上下文,用于管理应用启动时的依赖和资源// 配置无头模式属性,以支持在无图形环境下运行。
2025-02-24 07:30:00
2334
255
原创 解决MySQL错误:You can‘t specify target table ‘xxx‘ for update in FROM clause
核心问题:避免在同一语句中同时修改和查询同一张表推荐方法:优先使用派生表或JOIN,简洁高效;临时表适合复杂逻辑设计建议:在编写SQL时,尽量预先规划数据操作路径,减少子查询对目标表的直接依赖。
2025-02-19 07:30:00
2530
162
原创 深入理解Spring FactoryBean:灵活创建复杂对象的秘密武器
是 Spring 框架中的一个接口(位于包),用于创建复杂对象。与普通 Bean 不同,它本身是一个“工厂”,负责生成另一个 Bean 的实例。核心方法// 返回实际对象Class<?// 返回对象类型// 是否单例FactoryBean 与普通 Bean 的区别普通 Bean:容器直接实例化并管理其生命周期:容器会调用其方法返回目标对象当定义一个名为的 FactoryBean 时,返回的是的结果若需获取 FactoryBean 本身,需使用(名称前加假设我们需要根据配置动态创建不同品牌的。
2025-02-17 09:52:01
3170
232
原创 Spring排序机制:接口与注解的使用
Spring 提供了多种机制来控制Bean 的加载顺序和优先级,主要的排序机制包括Ordered接口、接口、@Order注解和@Priority注解。通过合理使用这些机制,可以有效地管理 Spring 容器中 Bean 的加载顺序,确保不同功能模块按照预期的顺序进行初始化。
2025-02-12 08:00:00
2140
245
原创 SpringBoot源码解析(十):应用上下文AnnotationConfigServletWebServerApplicationContext构造方法
SpringBoot源码系列文章SpringBoot源码解析(一):SpringApplication构造方法SpringBoot源码解析(二):引导上下文DefaultBootstrapContextSpringBoot源码解析(三):启动开始阶段SpringBoot源码解析(四):解析应用参数argsSpringBoot源码解析(五):准备应用环境SpringBoot源码解析(六):打印BannerSpringBoot源码解析(七):应用上下文结构体系 在前文中,我们深入解析了启动Banner的类型打
2025-02-10 07:30:00
7125
218
原创 Spring容器初始化扩展点:ApplicationContextInitializer
是 Spring 框架提供的一个接口,用于在 Spring 应用上下文(刷新之前对其进行自定义初始化。它允许开发者在上下文加载 Bean 定义之前,对上下文进行一些额外的配置或修改。在上下文刷新之前,可以通过动态注册自定义的 Bean 定义。// 创建自定义的 BeanDefinition registry . registerBeanDefinition("customBean" , beanDefinition);} }
2025-02-06 07:30:00
5087
273
原创 SpringBoot源码解析(九):Bean定义接口体系
Spring容器的核心在于其对Bean的管理,而这一切的基础则由接口体系所支撑。BeanDefinition作为描述和定义Spring容器中Bean的核心接口,它不仅负责存储Bean的元数据,还为容器的实例化、依赖注入和生命周期管理提供了必要的信息。接下来我们将对其主要组件进行介绍。是一个用于管理和操作键值对形式属性的接口,提供设置获取删除、检查属性等通用功能,广泛应用于Spring框架中元数据的管理。// 单例作用域标识符:`singleton`(表示该 Bean 在整个容器生命周期内只有一个实例)
2025-02-03 08:00:00
2077
183
原创 SpringBoot源码解析(八):Bean工厂接口体系
在前文中,我们详细概述了SpringBoot架构中应用上下文结构体系的各个组件。其中,通用应用上下文(GenericApplicationContext)通过创建负责注册、管理和创建Bean定义,同时支持依赖注入和动态Bean管理。结构相对复杂,接下来我们将对其组件逐一进行介绍。是Spring框架中BeanFactory接口的抽象实现,负责提供Bean的基础获取和管理功能,但不包含具体的Bean创建逻辑。//表示当前BeanFactory的父工厂(支持层级结构),用于递归地从父工厂中查找Bean。
2025-01-27 10:26:33
3096
199
原创 SpringBoot源码解析(七):应用上下文结构体系
在解析SpringBoot源码之前,需要对其使用的应用上下文(ApplicationContext)相关组件有清晰的了解。SpringBoot的核心在于基于Spring的扩展,其自动配置机制、嵌入式Web容器等特性都依赖于一套规范的上下文组件。因此,提前理清这些核心组件的功能和职责,可以显著提高源码阅读的效率,避免频繁地在代码中跳转而迷失方向。SpringBoot在调用方法启动时,根据应用类型(如 Servlet 类型)通过方法推断并创建,用于初始化和管理 Web 应用的上下文环境。
2025-01-13 07:30:00
3287
249
原创 Shell编程详解
Shell被翻译为“壳”。在Linux内核外面包了一个壳Shell是一种用于与操作系统进行交互的命令行解释器它是一种脚本语言,可以通过编写一系列的命令和脚本来执行操作系统的功能和任务我们在终端中编写的命令都是Shell命令。例如:ls、grep…等基本语法# 函数体:执行的命令或脚本# 函数体:执行的命令或脚本示例" } # 调用函数 say_hello如果希望在 任何地方都可以调用函数,可以将函数定义放入Shell的配置文件中,例如~/.bashrc或~/.zshrc。方法。
2025-01-06 07:30:00
3333
257
原创 我的五周年创作纪念日
之前写文章比较随性,看一个视频写一篇,直到我开始写tomcat源码系列,找的视频都一般,太难了,就几篇文章我记得断断续续写了有半年,反正好几个月,因为不好写,所以每次写着写着就不写了,一直来来回回的拖着。后来我发现必须定目标了,每周一必须发表一篇文章,所以有时候周末也是挺痛苦的,因为第二天必须交差,所以熬夜也得完成。至于成就好像就没啥了,有的是自信,因为通过学习和记录掌握了很多知识点的原理,和其他人对峙时候,我也就自信😎多了,怼他就完事了。哎,快35了,就目前的就业情况,没有办法,给我学,卷死你们。
2024-12-30 08:00:00
2080
299
原创 Linux系统常用命令详解
Windows操作系统:由微软公司开发的操作系统,广泛应用于个人电脑、服务器、游戏机等设备中win xpwin7/win8/win10/win11等Unix操作系统(1960年代诞生):由贝尔实验室开发的一类操作系统,主要应用于服务器、工作站、超级计算机等领域,具有稳定、安全等特点Solaris:SUN公司开发AIX:IBM开发HP-UX:惠普公司开发macOS:苹果公司开发,主要应用于苹果公司的电脑和笔记本电脑上。
2024-12-16 07:00:00
7321
352
原创 SQL Bug:一个意想不到的错误
在进行SQL连表查询时,关联字段的数据类型不匹配可能会导致各种问题,如部分数据重复。为了避免这些问题,我们应该尽量保持关联字段的数据类型一致,并在进行类型转换时仔细检查数据内容,确保转换的正确性。
2024-12-12 17:44:17
5881
288
原创 Spring发布-订阅模式:解耦与异步通信的高效实现
Spring框架通过发布订阅模式为组件间通信提供了高效且松散耦合的解决方案,提升了系统的灵活性和扩展性。本文将探讨该模式的原理、实现、应用场景及其优势与挑战。定义事件类,事件类通常继承自我们可以定义一个类来表示用户注册成功的事件// 这里的User是一个包含用户相关信息的实体类// source:事件的源对象,用于表明这个事件是由哪个对象触发的// 具体作用下面订阅事件中解释Spring的发布-订阅模式通过和等组件,解耦了消息的生产者和消费者,并支持异步通信。
2024-12-09 07:30:00
8382
319
原创 SpringBoot源码解析(六):打印Banner
在前文中,我们深入解析了SpringBoot启动时应用环境的准备过程。接下来将深入介绍启动Banner打印的具体实现及流程。SpringBoot版本2.7.18SpringApplication的run方法的执行逻辑如下,本文将详细介绍第5小节:打印启动Banner// SpringApplication类方法// 记录应用启动的开始时间// 1.创建引导上下文,用于管理应用启动时的依赖和资源// 配置无头模式属性,以支持在无图形环境下运行。
2024-12-02 07:30:00
4463
363
原创 SpringBoot源码解析(五):准备应用环境
在前文中,我们深入解析了启动类main函数中args参数被解析为选项参数和非选项参数的过程。接下来,我们将探讨SpringBoot启动时应用环境的准备过程,包括读取配置文件和设置环境变量的步骤。SpringBoot版本2.7.18SpringApplication的run方法的执行逻辑如下,本文将详细介绍第4小节:准备应用环境// SpringApplication类方法// 记录应用启动的开始时间// 1.创建引导上下文,用于管理应用启动时的依赖和资源。
2024-11-25 07:30:00
4318
361
原创 SpringBoot源码解析(四):解析应用参数args
前文深入解析了SpringBoot启动的开始阶段,包括获取和启动应用启动监听器、事件与广播机制,以及如何通过匹配监听器实现启动过程各阶段的自定义逻辑。接下来,我们将探讨SpringBoot启动类main函数中的参数args的作用及其解析过程。SpringBoot版本2.7.18SpringApplication的run方法的执行逻辑如下,本文将详细介绍第3小节:解析应用参数// SpringApplication类方法// 记录应用启动的开始时间。
2024-11-18 07:30:00
3825
403
原创 丹摩征文活动|丹摩智算平台使用指南
丹摩智算平台通过一站式的数据分析与建模服务,简化了用户的操作流程,从数据预处理到模型部署及监控,帮助用户更快、更有效地完成数据分析和模型应用。以下指南详细介绍了该平台的操作步骤及主要功能模块,帮助用户快速上手,提升工作效率。丹摩智算平台是一个高度集成的智能计算平台,提供从。
2024-11-14 10:43:01
2204
317
原创 SpringBoot源码解析(三):启动开始阶段
前文深入解析了引导上下文作为组件存储容器的角色,接下来将进入启动开始阶段的内容。SpringBoot版本2.7.18SpringApplication的run方法的执行逻辑如下,本文将详细介绍第二小节:获取启动监听器,调用启动开始方法// SpringApplication类方法// 记录应用启动的开始时间// 1.创建引导上下文,用于管理应用启动时的依赖和资源// 配置无头模式属性,以支持在无图形环境下运行// 将系统属性 java.awt.headless 设置为 true。
2024-11-11 07:30:00
2928
286
原创 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext
前文深入解析SpringApplication构造方法,而接下来的几篇文章将重点介绍run方法的执行逻辑。SpringApplication的run方法的执行逻辑如下,本文将详细介绍第一小节:创建引导上下文// SpringApplication类方法// 记录应用启动的开始时间// 1.创建引导上下文,用于管理应用启动时的依赖和资源// 配置无头模式属性,以支持在无图形环境下运行// 将系统属性 java.awt.headless 设置为 true。
2024-11-04 07:00:00
3794
334
原创 SpringBoot源码解析(一):SpringApplication构造方法
在之前的文章中,我们深入研究了Tomcat、Spring、以及SpringMVC的源码。这次,我们终于来到SpringBoot的源码分析。接下来的几篇文章将重点关注SpringBoot的启动原理和自动配置原理。本篇文章将聚焦于SpringApplication的构造方法。基于2.7.18版本,这也是SpringBoot3发布前的最后一个版本。方法是启动SpringBoot应用的核心入口。我们从这个方法开始,逐步深入。是 Spring 框架中的一个关键配置文件,通常位于类路径下的META-INF目录中。
2024-10-29 14:02:37
10537
337
原创 EasyExcel自定义下拉注解的三种实现方式
在使用EasyExcel设置下拉数据时,每次都要创建一个组件确实比较繁琐。为了优化这个过程,我们可以通过自定义注解来简化操作,使得只需要在需要添加下拉数据的字段上添加注解即可。注解实现三种方式可供选择方式一:固定值方式二:动态获取复杂数据方式三:通过码值获取码值表的数据列表方式一只需要添加注解即可方式二在查询复杂的情况下使用,每个下拉都需要创建一个ExcelDynamicSelect的实现类,并添加注解方式三只需要添加注解。
2024-10-22 23:54:14
5239
339
原创 Maven入门到进阶:构建、依赖与插件管理详解
Maven是软件基金会开发的一款和,主要用于Java 、和。Maven通过声明性配置(XML 文件)定义项目构建流程及依赖项,使得项目管理更简单、更高效,特别适合于多模块、大型项目。 在Maven中,GAVP是构建项目的四个核心属性的缩写,分别代表、、和。这四个属性在文件中定义,用于唯一标识一个Maven项目或依赖。1.2、ArtifactId定义:项目或模块的标识符,是,通常是小写的、简短的名称用途:用于唯一标识项目中的某个模块。通常一个项目会有多个模块,每个模块的ArtifactId都
2024-10-21 07:00:00
4020
249
原创 SpringBoot基础(五):集成JUnit5
JUnit5是一个功能强大的单元测试框架,是JUnit系列的最新版本,它引入了多个改进和新特性,旨在为Java应用程序提供灵活且模块化的测试支持。单元测试是指对软件中的最小可测试单元进行检查和验证的过程叫单元测试在SpringBoot中,最小可测试单元就是指方法。
2024-10-14 07:00:00
7385
280
原创 SpringBoot基础(四):注册Bean的八种方式及适用场景
使用对象加载MyConfig,即使MyConfig类什么注解没有,也会被注册为bean。
2024-10-07 07:00:00
6650
282
原创 SpringBoot基础(三):Logback日志
SpringBoot基础系列文章SpringBoot基础(一):快速入门SpringBoot基础(二):配置文件详解SpringBoot基础(三):Logback日志默认使用作为,作为来记录日志Logback是由设计的另一个开源日志组件,性能比log4j要好 适配器作用:以后想要换其他日志框架,只要排除掉logback日志实现,导入log4j2或jul的日志实现即可,代码中API还是slf4j不需要修改,。 注解的原理就是在编译后的Class文件的类名下生成,所以这两使用哪个都一样。2、默
2024-10-04 18:41:44
9243
171
原创 java日志门面之JCL和SLF4J
什么时日志门面?随着系统开发的进行,可能会更新不同的日志框架,造成当前系统中存在不同的日志依赖,让我们难以统一的管理和控制。借鉴JDBC的思想,为日志系统也提供一套门面,那么我们就可以面向这些接口规范来开发,避免了直接依赖具体的日志框架。这样我们的系统在日志中,就存在了日志的门面和日志的实现。常见的日志框架及日志门面常见日志门面:JCL、slf4j常见日志实现:JUL、log4j、logback、log4j2框架诞生顺序:log4j --> JUL -->JCL-->slf4j。
2024-09-27 07:00:00
8989
310
原创 java日志框架之Log4j
Log4j是Apache的一个开源项目可以控制日志信息输出到控制台文件、甚至是数据库中可以控制每一条日志的输出格式通过一个配置文件来灵活地进行配置,而不需要修改应用的代码主要由Loggers (日志记录器)、Appenders(输出控制器)和 Layout(日志格式化器)组成Loggers:控制日志的输出级别与日志是否输出Appenders:指定日志的输出方式(输出到控制台、文件等)Layout:控制日志信息的输出格式;源码默认从类路径找。
2024-09-23 07:00:00
4780
254
原创 java日志框架之JUL(Logging)
JUL全程,它是java原生的日志框架,使用时不需要另外引用第三方的类库相对其他的框架使用方便,学习简单,主要是使用在小型应用中Logger:被称为记录器应用程序通过获取Logger对象,调用其API来发布日志信息Logger通常被认为是访问日志系统的入口程序Handler:处理器每个Logger都会关联一个或者是一组HandlerLogger会将日志交给关联的Handler去做处理,由Handler负责将日志做记录Handler具体实现了日志的输出位置,比如可以输出到控制台或者是文件中等等。
2024-09-18 07:00:00
2131
268
原创 SpringBoot基础(二):配置文件详解
方式一:使用临时属性设置配置文件名,注意仅仅是名称,不要带扩展名方式二:使用临时属性设置配置文件路径或类路径,全路径名。
2024-08-12 04:51:41
11902
309
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人