- 博客(183)
- 资源 (13)
- 收藏
- 关注
原创 Spring MVC 九大组件源码深度剖析(一):MultipartResolver - 文件上传的幕后指挥官
本文深入分析了Spring MVC中文件上传核心组件MultipartResolver的设计原理与实现机制。
2025-08-03 16:53:37
537
原创 Spring MVC设计精粹:源码级架构解析与实践指南
Spring MVC是Java Web开发的标杆框架,采用前端控制器模式和分层架构设计,通过DispatcherServlet统一处理请求。其核心设计遵循单一职责、开闭原则和分层处理原则,包含九大组件的初始化流程。源码分析揭示了文件解析器、国际化支持、处理器映射和适配器等关键组件的实现机制,如RequestMappingHandlerMapping通过注解建立请求映射,HandlerAdapter负责调用具体处理器。
2025-07-27 22:05:49
1149
原创 Spring MVC上下文容器在Web容器中是如何启动的(源码深入剖析)?
本文深入解析了Spring MVC在Tomcat等Web容器中的启动过程,重点阐述了父子容器的协作机制。
2025-07-20 17:07:23
693
原创 Spring IOC容器在Web环境中是如何启动的(源码级剖析)?
本文深入剖析了Spring IOC容器在Web环境中的启动机制及其与Servlet容器的集成过程。
2025-07-19 16:45:31
619
原创 Spring AOP 是如何生效的(入口源码级解析)?
Spring AOP 的生效始于容器启动阶段的核心组件注册过程,这是整个 AOP 机制的关键入口。
2025-07-12 21:21:16
1011
原创 JDK动态代理:深入解析Java动态代理的核心实现
JDK 动态代理通过 运行时生成代理类字节码 + 统一方法转发到 InvocationHandler 实现动态代理。其设计优雅地结合了 Java 反射机制与类加载机制,成为 Java 生态中 AOP 和中间件开发的基础技术。尽管存在接口依赖的限制,但在 Spring 等框架的巧妙封装下,仍被广泛应用于企业级开发。
2025-07-10 21:24:18
1046
原创 Spring AOP 设计解密:代理对象生成、拦截器链调度与注解适配全流程源码解析
Spring AOP通过JDK动态代理和CGLIB实现代理机制,核心设计围绕Advice、Pointcut和Advisor三大接口展开。代理选择由DefaultAopProxyFactory根据目标对象特性动态决定:无接口或强制配置时使用CGLIB,否则优先JDK代理。代理对象创建后,通过拦截器链机制(JdkDynamicAopProxy或DynamicAdvisedInterceptor)执行增强逻辑,将横切面设计与Proxy模式完美结合。整个流程展现了Spring AOP灵活可扩展的架构设计。
2025-07-07 21:32:14
1194
6
原创 Spring AOP 进阶实战手册:从自定义注解到源码级调优
本文深入探讨Spring AOP的高阶应用,涵盖自定义注解实现方法级标记、多通知类型组合使用、常见问题解决方案和性能优化技巧。
2025-07-06 12:17:27
1215
原创 Spring AOP 核心概念全解析:从动态代理到切面编程实战
Spring AOP(面向切面编程)是Spring框架的核心模块,通过动态代理技术将横切关注点(如日志、事务)模块化地织入业务逻辑中。其核心价值在于解决代码重复、耦合度高和维护困难等问题。AOP基于代理模式实现,主要有JDK动态代理(适用于接口实现类)和CGLIB代理(适用于无接口类)两种机制。
2025-07-06 09:39:50
878
原创 Spring容器启动终章:finishRefresh()完成刷新全流程详解
深入解析Spring容器启动的最后一步finishRefresh(),揭示其作为容器就绪关键阶段的技术实现。该方法完成资源清理、初始化生命周期处理器、发布就绪事件和注册JMX监控等核心工作,标志着容器从初始化到就绪的转变。
2025-07-05 10:55:00
936
原创 Spring IOC容器核心阶段解密:★Bean实例化全流程深度剖析★
在Spring框架中,finishBeanFactoryInitialization(beanFactory)是整个IOC容器启动过程中最核心、最重量级的阶段。这个阶段负责实例化、初始化和装配所有非延迟加载的单例Bean,通常消耗整个启动过程70%以上的时间。理解这个阶段的内部机制,对于掌握Spring框架精髓、优化应用性能至关重要。
2025-07-01 18:41:10
1094
原创 Spring事件监听机制深度解析:registerListeners源码揭秘
深入剖析了Spring容器启动中的关键步骤registerListeners(),揭示了Spring事件驱动模型的核心机制。
2025-07-01 09:27:13
784
原创 Spring容器启动的隐藏关卡:onRefresh()扩展点深度解析
Spring容器启动过程中的onRefresh()方法是一个关键但易被忽视的扩展点,位于核心基础设施初始化后、单例Bean实例化前,为子类容器(如Web或响应式应用)提供专属初始化入口。
2025-06-30 12:18:37
1021
原创 Spring事件驱动模型核心:ApplicationEventMulticaster初始化全解析
Spring容器启动过程中,事件广播机制是核心环节,通过ApplicationEventMulticaster实现事件发布订阅。
2025-06-29 17:27:07
1067
原创 Spring容器启动揭秘:国际化支持(MessageSource)的初始化魔法
Spring国际化(i18n)支持的核心机制MessageSource在容器启动时通过initMessageSource()方法初始化。
2025-06-29 11:13:16
718
原创 Spring Bean的五大核心后置处理器赏析:Bean生命周期的幕后操控者
本文深入剖析了Spring容器中五大核心Bean后置处理器的工作原理。重点解析了AutowiredAnnotationBeanPostProcessor如何实现依赖注入,CommonAnnotationBeanPostProcessor如何处理生命周期回调,以及AnnotationAwareAspectJAutoProxyCreator创建AOP代理的机制。此外还介绍了ApplicationListenerDetector和PersistenceExceptionTranslationPostProcess
2025-06-28 22:39:02
971
原创 Spring IOC容器核心机制:Bean后置处理器注册全解析
本文深入解析Spring框架中registerBeanPostProcessors阶段的核心作用与实现机制。作为IOC容器启动的关键步骤,该阶段通过三级优先级系统注册Bean后置处理器,支撑了依赖注入、AOP代理和生命周期回调等核心功能。
2025-06-26 14:44:55
720
原创 Spring 容器核心扩展实战:Spring Boot中三大扩展问题解析
本文深入解析Spring容器核心扩展点invokeBeanFactoryPostProcessors的三大高级应用场景。
2025-06-25 14:51:13
629
原创 Spring容器核心扩展点:执行BeanFactory后置处理器剖析
Spring容器启动中的invokeBeanFactoryPostProcessors是核心扩展点,允许在Bean实例化前动态修改或注册BeanDefinition。该阶段执行两类处理器:BeanDefinitionRegistryPostProcessor(动态注册)和BeanFactoryPostProcessor(修改定义),是Spring Boot自动配置等功能的基础。
2025-06-25 12:48:42
740
原创 Spring容器深度扩展点:postProcessBeanFactory详解
Spring容器的postProcessBeanFactory是启动流程中关键的扩展点,位于BeanFactory初始化后、Bean定义加载前,为开发者提供了深度定制容器的能力。该扩展点支持注册自定义作用域、特殊依赖解析和环境敏感配置等高级功能,是Spring MVC、Spring Boot等框架的核心扩展机制。
2025-06-24 21:05:17
611
原创 Spring容器启动的关键一步:prepareBeanFactory详解
Spring容器启动过程 prepareBeanFactory是关键步骤,主要完成九项核心配置:1)设置类加载器;2)注册SpEL表达式解析器;3)添加属性编辑器;4)注入ApplicationContextAwareProcessor后置处理器;5)忽略特定Aware接口自动装配;6)注册可解析依赖;7)添加事件监听检测器;8)处理LoadTimeWeaver;9)注册环境相关单例Bean。该阶段为容器奠定运行基础,
2025-06-23 20:32:06
636
原创 Spring容器知多少:从BeanFactory到Boot容器,深入解读IOC家族
本文系统梳理了Spring框架中的各类IOC容器,揭示其核心设计思想与适用场景。Spring容器分为两大体系:基础型BeanFactory(如DefaultListableBeanFactory)和企业级ApplicationContext(包括通用容器、Web容器、响应式容器等特殊场景容器)。
2025-06-22 19:51:44
950
原创 Spring IOC容器核心揭秘:BeanFactory创建、配置加载&解析并注册为BeanDefinition
本文深入解析Spring框架IOC容器启动的关键步骤——BeanFactory创建与配置元数据加载。作为容器启动的基础阶段,该流程完成BeanFactory实例化、配置元数据解析转换(生成BeanDefinition)及注册到容器等核心操作。通过源码分析,文章详细剖析了XML配置加载的委托模式解析架构、BeanDefinition属性解析以及注册机制,揭示了Spring分层设计思想与资源配置抽象体系。该阶段为后续依赖注入提供基础,是理解Spring核心机制的关键切入点。
2025-06-22 15:51:42
820
原创 深入骨髓!Spring IOC容器创建全过程剖析
Spring IOC 容器(Inversion of Control Container)是 Spring 框架的核心,负责管理应用对象的生命周期、依赖关系和配置。理解其创建过程对于掌握 Spring 至关重要。核心目标: 读取配置元数据(XML、注解、Java Config),解析其中的 Bean 定义(BeanDefinition),实例化 Bean,装配依赖关系(依赖注入),执行初始化回调,最终提供一个包含所有配置好、可用的 Bean 的容器。
2025-06-21 13:37:00
1035
原创 Spring Boot揭秘:一个JAR包如何神奇地启动内嵌Tomcat?
Spring Boot可执行JAR包通过巧妙设计实现内嵌Tomcat的一键启动。其核心机制包括:1) 特殊的JAR结构通过JarLauncher启动;2) 分层类加载器加载应用和依赖;3) SpringApplication在刷新上下文时自动创建Tomcat实例;4) 条件化自动配置动态判断Web环境。整个过程体现了约定优于配置的理念,开发者只需关注main方法,框架自动处理容器集成、Servlet注册等复杂逻辑,实现从传统WAR部署到轻量JAR的范式转变。
2025-06-19 10:09:12
1137
原创 告别时间戳手动换算烦恼!这款IDEA插件让你时间处理效率翻倍!
《告别时间戳手动换算烦恼!这款IDEA插件让你时间处理效率翻倍》介绍了一款名为CalendarClock的IntelliJ IDEA插件。该插件主要解决开发者在调试日志、数据库查询等场景中频繁遇到的时间戳转换问题。核心功能包括:一键将时间戳转换为可读日期(支持毫秒/秒级)、逆向将日期转为时间戳,并内置可视化实时时钟辅助开发。插件优势在于无需切换开发环境即可完成转换,减少操作中断,提升效率。安装简单,完全免费,适用于IntelliJ IDEA 2023.3及以上版本。文章还提供了GitHub源码地址和安装指引
2025-06-17 20:05:19
671
原创 构建高效开发节奏:我的IDEA休息提醒插件实践
摘要:为解决开发者长时间工作忘记休息的问题,本文介绍了一款基于Java开发的IDEA插件Timer Reminder Tool。该插件提供可配置的工作时段提醒(默认60分钟)、可视化倒计时状态栏及暂停/恢复功能。关键技术包括计时服务、通知管理和配置持久化,支持线程安全和低资源占用(内存<15MB)。插件已开源,适用于IDEA 2020.3+版本,未来可扩展团队统计等功能。通过开发者社区反馈,该工具有效改善了工作节奏。(147字)
2025-06-11 18:40:23
523
原创 【Quarkus】使用 MapStruct 的 @AfterMapping 注解不生效
MapStruct的@AfterMapping与Lombok的@Builder不兼容issue
2024-12-03 15:52:26
1128
原创 【Quarkus】基于CDI和拦截器实现AOP功能(进阶版)
允许在同一位置重复使用同一个注解,这是java注解的通用功能,并非quarkus独有,但是在quarkus中使用时有些需要注意的限制。要求设计一个拦截器,名为SendMessage,功能是对外发送通知,通知的方式有短信和邮件两种,具体用哪种是可以通过拦截器属性设置的。拦截器自己是个注解,而注解是有属性的,所以我们时可以在自定义的拦截器注解中添加属性成员的,这样在拦截器使用的时候有更多扩展空间。注解所标注的,否则在使用有设置属性的拦截器时该拦截器功能不会生效。
2024-11-25 10:49:36
954
1
原创 【Quarkus】基于CDI和拦截器实现AOP功能
CDI全称:Quarkus DI 解决方案(也称为 ArC)基于 Jakarta 上下文和依赖注入 4.1 规范。它实现了 CDI Lite 规范,并进行了选定的改进,并通过了 CDI Lite TCK。它不实现 CDI Full。另请参阅支持的功能和限制列表拦截器用于将横切关注点与业务逻辑分开。有一个单独的规范 - Java 拦截器 - 定义了基本的编程模型和语义。
2024-11-25 10:47:02
879
原创 Spring batch 不同数据源迁移百万级数据遇到NonSkippableReadException的解决方案
Spring batch 的使用
2023-07-21 14:17:41
675
原创 Python的线程池之ThreadPoolExecutor
线程池ThreadPoolExecutorThreadPoolExecutor位于python3标准库的并发包(concurrent.futures)下,特点主线程可以获取某一个线程的状态,以及返回值。线程同步让多线程和多进程的编码接口一致。简单粗暴...
2022-07-25 20:51:43
7530
原创 部署第三方Jar包到Nexus私服
为了方便我们开发,经常会有需求就是将第三方的jar包发布到我们自己的nexus私服上;具体可有两种方式实现1、通过命令进行上传;2、通过nexus管理端页面操作上传。本文就以这两种方式分别做介绍。......
2022-07-21 16:56:57
2651
原创 MongoDB ‘planner returned error: unable to find index for $geoNear query‘ on server x.x.x.x:27017
MongoDB Geospatial Query Operators
2022-06-27 18:25:11
1109
原创 java.lang.ClassCastException: java.util.HashMap cannot be cast to xxx.entity.Xxx
由于这两个 List 集合泛型不一致而引发的类型转换异常
2022-06-23 19:00:13
13567
1
原创 Java 确定两个区间范围是否有交集
问题背景:日常工作项目中可能会遇到类似的针对两个及以上的区间范围来判断是否有交集的场景;可能是两个日期时间段、地点距离区间、金额范围区间等等。第一次遇到难免会觉得两个区间的可能性比较多,使用一一穷举的方式显然不行的, 这时候不妨换一种思路来思考就简单清晰多了。思路分析:如果首先考虑相交的情况是比较的,这个时候需要反其道而行,即考虑不相交的情况就相对简单多了;其实不相交的情况就两种:两者不连续,区间1的范围完全在区间2的范围之前 两者不连续,区间1的范围完全在区间2的范围之后图示如下:
2021-09-14 20:55:17
6422
2
原创 关于nginx报499的问题排查分析
关于nginx报499的问题排查分析499 错误(官方解释:)分析缘由nginx方分析tomcat方分析结论499 错误(官方解释:)ngx_string(ngx_http_error_495_page), /* 495, https certificate error*/ngx_string(ngx_http_error_496_page), /* 496, https no certificate */ngx_string(ngx_http_error_497_page), /* 497, ht
2021-07-27 16:02:47
3312
原创 严重: The web application [/] registered the JDBC driver [xxx.xxx.xxx] but failed to unregister ...
问题描述:Tomcat 服务器启动报异常提示数据库驱动不能被注册,当应用被停止时。为了防止内存泄漏,已强制注销JDBC驱动程序。折腾了2小时最后LZ定位问题是出于开发环境与服务器环境JDK版本不一致导致的。异常信息:严重: One or more listeners failed to start. Full details will be found in the appropriate container log file二月 23, 2021 3:14:08 下午 org.apache
2021-02-23 16:31:43
5058
原创 微信扫一扫(wx.scanQRCode)功能新手可能遇到的问题
问题场景:开发阶段遇到的坑,调用微信扫一扫(wx.scanQRCode)功能可能出现的问题1、iOS设备扫码正常,Android设备扫码后没反应2、Android设备扫码正常,iOS设备扫码后没反应究其原因:微信开发文档并没有说清楚,其实在微信后台可能是维护了2个接口,或者是对设备类型进行了区别,总之在回调函数中返回的结果封装对象并不是同一个,所以这要求我们也进行相应的处理,不然就...
2020-02-27 16:27:48
40514
13
Sprintboot的入门案例
2018-04-12
dubbo-admin-2.6.0.war包及源码.rar
2019-04-29
FastStoneCapture8.4 免费抓取屏幕截屏software、取色,标尺等、关键还可以录制视频、多种功能
2017-09-14
json数据包
2017-10-25
FastStoneCapture 免费抓取屏幕截屏software、取色,标尺等、关键还可以录制视频、多种功能
2017-09-13
苹果 Mac OS VMware Tools Darwin.rar
2017-09-17
mysql-connector-java-5.1.40-bin.jar
2017-09-22
QR Code的jar文件
2017-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人