- 博客(516)
- 资源 (3)
- 收藏
- 关注
原创 Spring 源码学习 15:Spring Boot
本文介绍了Spring Boot项目创建和启动的几种方式,包括命令行下载、war包项目开发以及Spring应用启动过程分析。主要内容包括: 通过curl命令下载Spring Boot项目框架 创建war包项目并添加JSP支持,演示外部Tomcat和内置Tomcat两种启动方式 深入分析Spring应用启动过程,包括构造器准备工作(加载Bean定义来源)和run方法初始化容器 演示配置类作为入口类时的注意事项,以及如何添加XML配置作为额外Bean来源 文章通过具体代码示例展示了Spring Boot项目的配
2025-07-12 08:00:00
1254
原创 Spring Easy
Spring Easy是一款简化Spring Boot开发的工具包,主要提供三项核心功能:1. 统一封装控制器返回结果为标准JSON格式(成功/失败标识+消息+数据);2. 全局异常处理,将业务异常和系统异常统一包装返回;3. 内置国内常用格式的时间类型(LocalDateTime/LocalDate)和枚举类型转换支持。通过Maven依赖引入即可自动配置,无需额外代码,显著提升Web开发效率,尤其适合需要统一响应格式和简化参数处理的国内项目。
2025-07-11 11:08:14
362
原创 Spring 源码学习 14:路径映射
Spring 提供了多种路径映射方式,主要包含三种实现: BeanNameUrlHandlerMapping 通过Bean名称映射URL请求,需搭配SimpleControllerHandlerAdapter使用 控制器需实现Controller接口,Bean名称以/开头 支持自定义实现HandlerMapping和HandlerAdapter RouterFunctionMapping 使用RequestPredicate进行路径映射 处理函数封装为HandlerFunction 需搭配HandlerFu
2025-07-10 08:00:00
1887
原创 Spring 源码学习 13:处理响应和异常
Spring 源码学习笔记 13 主要讲解了响应和异常处理机制。ResponseBodyAdvice 接口用于统一包装控制器返回值,可以通过 @ControllerAdvice 实现全局响应格式统一。文章详细说明了如何正确处理带有 @ResponseBody 或 @RestController 注解的控制器方法。 在异常处理方面,重点介绍了 ExceptionHandlerExceptionResolver 的运作机制,展示了如何使用 @ExceptionHandler 处理控制器方法抛出的异常,并返回 J
2025-07-09 08:00:00
564
原创 每天一个 Idea 小技巧:实现和引用
本文介绍了几个IntelliJ IDEA的实用小技巧:1)查看接口实现类的方法(Ctrl+Alt+鼠标左键);2)查找接口引用位置(Alt+F7);3)在查找结果窗口双击跳转文件;4)让左侧导航栏同步定位打开文件。这些快捷键和功能能帮助开发者快速查看代码关联关系,提高开发效率。
2025-07-08 08:00:00
148
原创 Spring 源码学习 12:控制器方法
摘要:文章解析了Spring框架中控制器方法的调用机制,重点介绍了@InitBinder注解的全局/局部应用方式及其缓存实现。通过类图展示了HandlerMethod核心组件及其调用流程,包括参数解析、数据绑定等关键步骤。通过代码示例模拟了完整调用过程,并说明@ModelAttribute参数的默认处理方式。文章结合源码分析和实践演示,深入剖析了Spring控制器方法从初始化到执行的全过程。
2025-07-07 08:00:00
944
原创 spring-initializer
摘要:Spring-initializer是一个Python工具,用于从Spring官网下载并解压Spring Boot框架代码。它解决了使用Idea或命令行工具下载时可能出现的连接超时问题,内置10次重试机制。相比阿里源,它能确保获取最新版本。安装后通过pysi命令即可生成默认Maven项目(含spring-web和lombok依赖),支持参数自定义项目配置。该工具还预留了扩展功能,未来可实现自动化修改pom.xml等操作。适用于Spring框架代码下载困难时作为备用方案。
2025-07-05 20:37:20
970
原创 Spring 源码学习 11:类型转换
Spring框架提供了多种类型转换机制,包括Formatter、Converter、PropertyEditor等接口,并通过TypeConverter进行统一封装。文章详细介绍了Spring类型转换的体系结构,包括SimpleTypeConverter、BeanWrapperImpl、DirectFieldAccessor和DataBinder等实现类的使用场景和示例代码。特别讲解了DataBinder在Web环境中的应用,以及如何通过ServletRequestDataBinder进行请求参数绑定。最后
2025-07-05 08:00:00
1434
原创 Homebrew 安装指南
本文介绍了Linux/MacOS平台包管理工具Homebrew的安装方法。首先通过官网提供的脚本命令进行安装,执行过程中需要输入管理员密码。安装完成后需按照提示设置环境变量PATH,才能正常使用brew命令。最后验证安装成功后可关闭并重新连接SSH,即可通过brew安装其他软件包。文章还提供了安装示例和参考资料链接,包括Homebrew官网和终端美化教程。
2025-07-04 08:00:00
235
原创 更换 WSL 版本
本文介绍了 Windows Subsystem for Linux (WSL) 的管理操作指南。主要内容包括:如何查看当前 WSL 版本和发行版信息;安装新版本的 Ubuntu 24.04 LTS;切换默认 WSL 发行版;以及迁移 WSL 虚拟机位置的方法(导出/导入)。此外还推荐了使用 Oh My Posh 美化命令行界面的方案。文章提供了详细的分步命令行操作说明,涵盖了 WSL 的日常管理和配置需求。
2025-07-03 11:10:01
177
原创 Spring 源码学习 10:参数解析器
本文介绍了Spring框架中处理控制器方法参数的解析器,主要探讨了RequestParamMethodArgumentResolver的用法。通过示例展示了如何解析带有@RequestParam注解的参数、未注解参数以及使用环境变量的默认值参数。文章还指出需要配合数据绑定工厂和Bean工厂才能实现完整功能,并介绍了使用HandlerMethodArgumentResolverComposite组合多个解析器的方法。通过MockHttpServletRequest模拟HTTP请求,演示了参数解析的具体过程,包
2025-07-02 08:00:00
907
原创 Spring 源码学习 9:MVC
本文介绍了Spring MVC的核心组件DispatcherServlet及其初始化过程。首先讲解了如何配置基础Web容器(Tomcat)和DispatcherServlet,重点说明了Servlet路径映射规则(/ vs /*)的区别。随后详细解析了DispatcherServlet的延迟初始化机制和如何通过配置实现立即初始化。文章深入剖析了DispatcherServlet初始化时加载的9大策略组件(如HandlerMapping、HandlerAdapter等),包括它们的默认实现和自定义配置方式。最
2025-07-01 08:00:00
976
原创 Spring 学习笔记 8:AOP 实现
摘要:本文介绍了使用Spring框架实现AOP(面向切面编程)的方法。主要内容包括:1)通过代理模式实现AOP,使用ProxyFactory创建代理对象;2)切点表达式匹配方法的方式(execution和@annotation);3)代理实现的选择规则(JDK或CGLIB);4)切点匹配的多种场景,包括方法级和类级注解的匹配。文章通过代码示例详细演示了如何配置切面、通知和代理对象,并说明不同场景下的AOP实现方式。
2025-06-30 08:00:00
679
原创 Spring 源码学习 7:动态代理
文章摘要:本文介绍了Spring中的两种动态代理实现方式:JDK代理和CGLIB代理。JDK代理基于接口实现,要求目标类必须实现接口;CGLIB通过继承目标类实现,不能代理final类和方法。文章还深入剖析了代理模式原理,通过代码示例展示了如何实现一个灵活的代理类,并逐步优化使其能够处理目标类的多个方法调用。最后讨论了如何通过Method参数传递方法信息,实现更通用的代理逻辑。
2025-06-29 10:47:33
749
原创 Spring 源码学习 6:AOP
本文介绍了Spring AOP的三种实现方式:动态代理、编译时织入(CTW)和加载时织入(LTW)。动态代理通过@EnableAspectJAutoProxy启用,使用代理对象实现AOP;编译时织入依赖AspectJ Maven插件在编译阶段修改字节码;加载时织入则通过@EnableLoadTimeWeaving在类加载时动态织入切面。文章详细展示了每种方式的配置方法和特点,包括依赖配置、注解使用和运行机制,并指出不同实现方式的技术差异和应用场景。
2025-06-25 08:30:00
929
原创 Spring 源码学习 5:Scope
Spring Bean作用域解析 本文介绍了Spring框架中的Bean作用域机制,主要包括五种作用域类型: singleton(默认):单例模式 prototype:每次获取新实例 request:HTTP请求级别 session:HTTP会话级别 application:Servlet容器级别 重点分析了作用域失效问题及三种解决方案: 使用@Lazy注解注入代理对象 通过@Scope的proxyMode属性配置代理 注入ObjectFactory实现延迟获取 文章通过示例代码对比了不同方案的实现方式,并
2025-06-24 08:30:00
1576
原创 Spring 源码学习 4:Aware 接口
Spring Aware接口与注解失效问题分析 摘要:Spring Aware接口(如ApplicationContextAware、BeanNameAware)允许bean获取容器资源,而InitializingBean接口提供初始化生命周期钩子。文章通过代码示例展示了这些接口的使用方式,并与依赖注入方式(@Autowired、@PostConstruct)进行对比。特别指出当配置类包含BeanFactoryPostProcessor时,会因创建顺序导致注解失效,并给出两种解决方案:1)重构配置类分离工厂
2025-06-23 10:31:30
1002
原创 Spring 源码学习 3:工厂后处理器
摘要: 本文介绍了Spring中工厂后处理器的用途及原理。工厂后处理器如ConfigurationClassPostProcessor能解析@Configuration、@ComponentScan等注解,动态注册Bean定义;MapperScannerConfigurer可自动扫描Mapper接口。通过自定义处理器示例,演示了如何解析@ComponentScan注解,扫描指定包下的类资源(如@Component标注的类),并利用反射和资源加载机制处理字节码文件。核心是通过后处理器扩展Bean定义注册流程,
2025-06-22 14:38:36
655
原创 Spring 源码学习 2:Bean 后处理器
本文探讨了Spring框架中Bean后处理器的使用和Bean生命周期管理。通过自定义实现BeanPostProcessor接口的处理器,作者详细观察了Bean从创建到销毁的完整生命周期过程。文章演示了如何利用postProcessBeforeInstantiation、postProcessAfterInitialization等钩子方法在不同阶段介入Bean的处理,并通过测试代码输出了完整的生命周期调用顺序。此外,作者指出这种机制采用了模板方法设计模式,并给出了简化版的Bean工厂实现示例,展示了如何自定
2025-06-20 17:29:21
313
原创 Spring 源码学习 1:ApplicationContext
文章摘要:本文深入分析了Spring框架中ApplicationContext的核心实现,重点探讨了AnnotationConfigApplicationContext的层级结构及其与DefaultListableBeanFactory的关系。通过源码解析,揭示了Spring容器如何通过ConcurrentHashMap保存Bean定义(beanDefinitionMap)和单例Bean实例(singletonObjects)。文章还展示了获取环境信息(EnvironmentCapable)和事件发布机制(
2025-06-19 12:15:05
967
原创 每天一个 Idea 小技巧:查看类图
IntelliJ IDEA查看类图的实用技巧:使用Ctrl+Alt+U快捷键可以直观查看类的继承层次关系,比Ctrl+I的文本方式更清晰。在类图中选中特定类后按F4可快速定位到代码编辑器中的对应位置。这个小技巧能帮助开发者更高效地理清类结构关系。
2025-06-17 14:51:57
198
原创 每天一个 Idea 小技巧:方法重载
IntelliJ IDEA方法重载选择技巧:在方法参数列表内时,按Ctrl+P调出重载方法选项框,再用Ctrl+↑/↓切换不同重载版本。注意光标必须位于参数列表中才能切换,仅方法名位置只能查看。若无效需检查快捷键设置或第三方软件冲突。比手动删除参数更高效。
2025-06-08 11:52:02
311
原创 Cursor 白嫖指南
本文提供了一份Cursor AI工具的白嫖指南,指导用户在试用期结束后如何继续免费使用。具体步骤包括:1) 退出客户端登录;2) 在无痕模式下删除官网账户;3) 以管理员权限运行Powershell脚本重新生成机器码;4) 禁用自动更新功能;5) 重新登录客户端。文章还提供了不同操作系统的脚本获取方式,强调网页操作需使用无痕模式。该指南旨在帮助用户绕过付费限制继续使用Cursor。
2025-05-27 08:16:47
281
原创 icexmoon-tree
icexmoon-tree是一个轻量级Java工具库,用于操作树形结构数据。主要功能包括:通过提供获取子节点和根节点的回调函数来构建树;支持销毁和重建树结构;提供深度优先/广度优先遍历方法;支持条件查找节点;可将复杂树结构转换为简化格式(移除Value层级)。该库通过反射机制处理对象拷贝,要求数据类型实现Nodeable接口并包含parent/children属性。适用于需要处理层级数据的Java应用,如组织架构管理等场景。项目开源,提供Maven依赖集成方式。
2025-05-25 11:55:20
525
原创 Maven 中央仓库操作指南
本文介绍了Maven中央仓库的使用指南,主要包括:1) 注册账号和命名空间,需通过DNS TXT验证;2) 生成用户令牌用于身份验证;3) 创建GPG密钥并上传至公共服务器;4) 配置Maven的settings.xml和POM文件,添加中央仓库发布插件、打包插件及GPG插件;5) 最终完成项目发布。文中详细说明了每个步骤的操作方法,包括命名空间验证、DNS配置、密钥生成与发布等关键环节,并提供了相关配置代码示例。
2025-05-24 20:55:25
1296
原创 auto-hot-key
本文介绍了基于 AutoHotKey 2.0 编写的两个实用脚本:一键最小化当前显示器的所有窗口和一键最小化当前窗口。文章详细说明了如何安装 AutoHotKey 本体、运行脚本以及设置脚本开机自启。此外,还提供了修改或编写自定义脚本的建议,并推荐使用腾讯元宝 AI 工具辅助编写脚本,特别强调了使用 DeepSeek 模型和开启深度思考与联网搜索的重要性。
2025-05-21 12:56:15
416
原创 DEBUG:Lombok 失效
在基于 Spring Boot 的项目中,Lombok 注解(如 @Getter 和 @Log)失效,导致编译时找不到 log 属性,且生成的 JSON 字符串为空。通过排查,发现可能的原因包括 Lombok 版本过低、IDE 版本过低、Lombok 插件未启用或编译器设置不正确。尽管尝试了升级 Lombok 和 IDE、检查插件和编译器设置,问题仍未解决。最终,通过重新生成 Idea 配置文件和清理 Idea 缓存,成功解决了问题。
2025-05-20 21:34:47
483
原创 Redis 学习笔记 5:分布式锁
在中学习了如何基于 Redis 创建一个简单的分布式锁。虽然在大多数情况下这个锁已经可以满足需要,但其依然存在以下缺陷:事实上一般而言,我们可以直接使用 Redisson 提供的分布式锁而非自己创建。
2025-05-19 09:56:29
974
原创 Redis 学习笔记 2:Java 客户端
Spring 对 Jedis 和 lettuce 进行了封装,spring-data-redis 提供统一的 API 进行操作。
2024-01-28 14:17:40
1302
原创 前端学习笔记 7:小兔鲜
创建项目:相关选项如下:在目录下添加以下目录:默认情况下在 VSCode 中输入时不会启用路径联想功能,要启用需要在项目根目录下添加 VSCode 配置文件:添加 ElementPlusElementPlus 加入的方式分为全部引入和按需引入,后者可以减少项目打包后的体积,所以这里采用按需引入。安装 ElementPlus:安装插件:修改,添加以下内容:修改进行验证:定制主题色安装 sass:添加主题色样式文件:修改:Axios 基础配置最好在框架代码中创建 Axios 实例,并进
2024-01-19 17:54:32
706
原创 前端学习笔记 6:Pinia
getters: {},actions: {},},})通过函数定义 Store,返回值同样是一个函数,且通常以的方式命名。state:Store 的状态(数据)getters:计算属性(类似于computed的返回值)actions:Store 的方法// 定义 state// 定义 getter// 定义 action})
2024-01-09 14:15:37
731
原创 前端学习笔记 4:Element Plus
在使用 Element Plus 之前,需要先创建一个 Vue 工程,具体可以参考。创建好后就可以按照注意,Element 和 Element Plus 是两个不同的项目,前者适用于 Vue 2.X,后者适用于 Vue 3.X。这里使用的是后者。
2024-01-02 19:30:08
979
原创 从零开始 Spring Cloud 15:多级缓存
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。官网:https://www.lua.org/Lua经常嵌入到C语言开发的程序中,例如游戏开发、游戏插件等。Nginx本身也是C语言开发,因此也允许基于Lua做拓展。
2023-10-23 18:56:08
610
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人