- 博客(677)
- 资源 (3)
- 收藏
- 关注
原创 aocache:AOCache 新增功能深度解析:从性能监控到灵活配置的全方位升级
aocache通过注解方式定义方法启用计算缓存,对于每一个切入点而言,在编译期就已经定义了缓存的配置(weakKeys,maximumSize,expireAfterAccess等等)。但实际应用场景中,通过AOCache 性能分析结果,可能会发现有些配置对切入点的综合性能提升并不理想,需要调整,这种情况下,如果切入点并不在当前项目,想要根据应用场景修改切点,就会很麻烦。所以需要一种切入点(JoinPoint)自定义配置机制,可以允许通过外部以切入点配置文件的形式对切入点的配置进行调整。通过。
2025-03-29 17:36:50
1077
原创 Bash环境定制git分支提示符暨JDK版本切换脚本
Git分支集成:通过修改PS1变量实现动态分支显示,依赖Git的脚本支持。JDK版本管理:利用环境变量JAVA_HOME和PATH控制Java版本,exec bash确保配置生效。
2025-03-18 15:14:41
435
原创 ai:告别AI知识库污染:clean4llm.sh(.py)代码清洗工具
我的工作平台是Eclipse+VSCode,VsCode中用阿里的和 也是轮换着用。IDE中的AI助手用着是方便,但是向AI提问的上下文最多仅限于当前工作空间(Workspace),对于需要跨项目的复杂问题,因为上下文的限制,就没办法在IDE中AI助手来解决。所以我还得依赖Cherry Studio建立知识库,来将解决复杂问题需要的不同数据整合到知识,再与AI交互。所以最近的工作在是学习在DeepSeek的帮助下解决一些复杂问题。对Cherry Studio建立知识库的也是在这个学习的过程中熟悉的。我们知道
2025-03-11 12:03:03
1081
原创 java:基于ASM的对Aspectj的JoinPoint参数封装技术解析
通过正确的参数分析处理策略,实现了安全可靠的JoinPoint参数封装。该方案已在中验证,成功解决了多参数场景下的自动包装问题。
2025-03-06 18:22:11
668
原创 java:基于ASM实现.class字节码引用包名重定向的技术解析
最近的工作与aspectj切面技术相关,为了实现零依赖,将aspectjrt包也重定位包名打到项目jar包中,但带来的问题因为aspectj相关包名被重定位了该项目也不能作为切面库使用,所以又想了一个更复杂的方案来解决这个问题,其中就需修改javac编译生成.class文件,将.class字节码中所有引用的aspectj类的包名进行修改重定向到新的包名。在DeepSeek的帮助下,已经实现了需求,此文作为技术总结,说明如何基于ASM实现.class引用包名的重定向。
2025-02-26 14:14:33
658
原创 maven:Maven插件开发实践:动态依赖注入与架构演进说明
最近的工作中设计了一个maven插件,需要在插件执行时的增加新的依赖库,本文作为总结,说明如何在插件执行时自主注入新的依赖库。
2025-02-26 12:18:58
1109
原创 maven:maven-shade-plugin插件被误解的参数 keepDependenciesWithProvidedScope
是一个典型的“文档描述 < 源码真相”案例。仅当时生效仅影响生成的 POM 文件,不控制 JAR 打包用于保留provided依赖在精简 POM 中的元数据它只是 POM 文件的管家,不是 JAR 打包的搬运工。
2025-02-24 14:36:37
858
原创 java:Apache Commons Configuration2占位符解析异常的正确解法:${prefix:name:-default}
- 新方案:添加默认值 --> < properties fileName = " ${sys:user.home}/${const:com.mycompany.GlobalConfig.HOME_FOLDER}/${env:XKE_RT_PROPERTIES:-} " config-name = " runtimeConfig " config-optional = " true " />
2025-02-20 15:13:41
851
原创 java:用Guava的TypeToken优雅处理通配符类型(WildcardType): ? extends Number
最佳实践建议:尽量使用子类模式:如保持类型安全结合TypeToken使用:借助Guava的强大类型推断能力注意类型边界:明确理解extends和super的行为差异防御式编程:在反射访问时做好类型校验性能考虑:TypeToken的内部缓存机制保证了重复使用的性能,但在高频场景建议缓存生成的WildcardType实例。通过本文的代码示例和原理分析,相信读者已经掌握了使用TypeToken优雅处理通配符类型的诀窍。这个技巧在处理复杂泛型系统时显示出极大的威力,值得加入每个Java开发者的工具箱。
2025-02-18 11:53:05
1086
原创 guava:基于TypeToken解析泛型类的类型变量(TypeVariable)的具体类型
Guava TypeToken是一个功能强大的泛型解析工具。可以很简单的实际这个需求。这样的带泛型参数的抽象类,如何在类初始化时得到F,T对应的类型?构造方法时已经完成了对F类型参数的解析,保存到。
2025-01-23 13:21:56
276
原创 acitvemq AMQP:因为消息映射策略配置导致的MQTT接收JMS消息乱码问题 x-opt-jms-dest x-opt-jms-msg-type
使用ActiveMQ(5.14.5)作消息系统服务的场景下,当我用Apache Qpid Proton发送消息(使用AMQP协议)发送JMS消息,用Paho MQTT接收消息的时候,收到的消息前面总是有一串乱码,大概就是这样:4Sp?ASr??
2024-12-28 18:18:36
484
原创 java:commons-configuration2读取yaml及组合配置定义(CombinedConfiguration)
之前写过一篇博客介绍了如何在Spring下集成commons-configuration2,通过来管理spring环境的所有配置。当时并没有介绍如何支持yaml格式的配置文件。Spring本身默认是用application.yaml来提供系统配置定义的。如果commons-configuration2能支持YAML格式,就更方便了。commons-configuration2其实也提供了对YAML格式文件的原生支持。
2024-12-09 13:02:54
990
原创 gnupg:解决window CMD下执行mvn release:perform时maven-gpg-plugin报错:gpg: signing failed: No secret key
我的工作平台主要是Windows,需要经常发布版本到maven中央仓库(mvn release:perform),这个发布动作我多数是在Bit Bash环境下完成的。上传到maven中央仓库的文件都需要插件签名:
2024-11-13 11:47:43
541
1
原创 java:使用Multi-Release Jar改造Java 1.7项目增加module-info.class以全面合规Java 9模块化规范
是一个我维护了好多年的一个基础项目,编译目标为Java 1.7现在整个团队的项目要做Java 9以上的技术迁移准备,就需要对这个在内部各项目中被广泛引用的基础项目进行改造,以适合Java 9的模块化规范。
2024-11-09 15:45:39
1354
原创 maven plugin:在自定义插件中获取当前项目的依赖库列表
方案二的好处显而易见,因为插件内部就能搞定项目的依赖库,如本例中,自定义插件不再需要通过定义一个参数(classpath)从外部传递项目依赖,也不再需要在pom.xml中定义maven-dependency-plugin插件获取classpath,简化了自定义插件的使用,而且场景适应性更好.
2024-11-08 11:41:12
984
原创 javadoc:JDK 9 下使用自定义Doclet调用JavadocTool的两种方案
方案一和方案二哪种更适合你?一般情况下两种方案都没有问题.我对于我来说,因为应用在maven插件中,所以只能选择方案二.个人认为方案二通用性更好.但是在只能通过String类型参数传递Doclet的的场景,也只能使用方案一,那么就不建议使用静态字段将传递出去由外部完成业务逻辑的方式,而是应该在自定义Doclet内部完成所有的业务逻辑更稳妥些.
2024-11-06 11:54:59
823
原创 java:修复aspectj-maven-plugin插件在java9项目中执行报错:cannot be resolved to a module
是我最近写的一个基于Java 9 的javadoc读取java代码注释的工具。在基于Java 9(我用的编译器JDK 19)编译时,插件在执行报了一堆错误:显示所有的模块在都不能被识别,这些模块名都是javadocreader9的中定义的模块名。如下是定义如下是javadocreader9的pom.xml片段:
2024-11-04 13:38:57
882
原创 java:jdk9环境下org.apache.maven.plugins:maven-plugin-plugin:3.4:descriptor报错:IllegalArgumentException
我用的maven版本是3.6.3,在JDK19环境下今天执行一个项目编译的时候报错了,如下是详细的错误信息,显示是。这个插件版本兼容问题,需要升级版本才能适应JDK 9以上的环境,这些配置在jdk8环境下编译都是正常的,所以我想到可能是。)查到这个插件3.x的最新版本是3.15.1。,果然错误消失,问题解决。在maven中央仓库(
2024-10-31 18:18:17
415
原创 javadoc:官方文档中关于-classpath,-sourcepath参数路径分割符的错误说明
javadoc官方文档中关于参数说明中明确说明路径分割为引号(‘;’)取自但经在linux下验证实际测试,显示这个说明是不正确的,参数的路径分割符应该使用系统的路径分割符。在 Windows 系统中,路径分隔符是分号 ‘;’,而在 Linux 系统中则是冒号 ‘
2024-10-01 17:25:28
253
原创 javadoc:(JDK9) TypeElement中查找指定方法(Method)对应的ExecutableElement对象
JDK9 javadoc API获取的源码注释结构化数据中,但是,JDK 9并没有提供从Java反射类型到java Doc类型的互操作。如果要想在TypeElement中获取指定方法的的注释对象,就要自己实现这个查找功能。本文介绍如何在TypeElement中查找指定方法(Method)对应的对象。
2024-09-26 12:33:38
586
原创 javdoc:(JDK9)VISITOR模式遍历语法树(DocCommentTree)获取代码注释中的tag(@return,@param)对象
上一篇博客介绍了JDK9下javadoc API的基本使用方法。本文进一步示例说明如何通过使用遍历语法树的方式更精确获取注释对象中子对象的方法。
2024-09-25 16:29:06
998
原创 javadoc:jdk 9通过javadoc API读取java源码中的注释信息(comment)
简单介绍了通过javadoc API读取源码注释的流程。那时还是用JDK 1.8。但是在JDK9环境下JDK 1.8的那一套API就不能用了。JDK 9提供了一套新的javadoc API实现注释代码的读取,即模块。本文说明如何基于来读取源码的注释。
2024-09-25 12:48:18
1133
4
原创 c/c++:CMakeLists.txt中添加编译/连接选项使用内存错误检测工具Address Sanitizer(ASan)
Address Sanitizer(ASan)是一个快速的内存错误检测工具。从gcc 4.8开始,AddressSanitizer成为gcc的一部分。既然是gcc内置的内存检查工具,用起来比第三方的库更方便些。上述示例中:代码的含义是使用cmake generator-expression(生成器表达式)指定只在编译器为gcc,且操作系统为Linux时增加编译选项同理,也是在编译器为gcc,且操作系统为Linux时增加链接选项。
2024-09-02 13:07:12
1308
4
原创 maven:release:perform错误:Presumably you have configured maven-source-plugn to execute twice times in
最近在执行maven release:perform 发布版本到maven中央仓库里出了如题的错误详细输出如下解决的办法也很简单,将pom.xml中的版本从默认的3.3.0降下来,改为3.2.1,这是maven 3.3.0的问题,也可能算是一个bug,详细说明参见下面《参考资料》提供的链接
2024-08-24 17:00:30
763
原创 thrift:拦截器ThriftEventHandler获取调用参数
之前写过一篇博客介绍了如何在在spring的拦截器一层获取POST请求参数。当我在thrift环境使用ThriftEventHandler拦截请求获取请求参数,也遇到了类似的问题:这个阶段,因为请求方法的参数还没有被反序列化,所以要想获取HTTP的请求参数,就要自己从HttpServletRequest中获取。要从请求内容里获取参数,就要从TProtocol里获取到,然后解析出数据就可以了。
2024-08-24 15:56:56
503
原创 java:获取桥接方法的参数名
如果一个方法是桥接方法,那么因为这个方法是由编译器自动生成的,所以它的方法参数名是无意的arg0,arg1。所以对于一个由编译器生成的桥接方法,如果要获取它的参数名,需要得到它实际调用的有原始方法,也就是被桥接方法,库中的同名方法,这是我从spring-core 5.3.12提取出代码,重新封装为适用JDK1.7环境的库。说实话,这个逻辑很挺复杂,但好在有人已经帮我们做了这些工作,如果在spring环境,可以使用spring的。对象中的name就是这些意义的名字。方法就能得到正确被桥接方法。
2024-08-24 15:39:51
425
原创 fastjson:如何快速查找JSON Object中有没有指定名字的字段?
经此一役,深刻体会antlr4虽然好学好用,但其面向通用场景生成的JSON词法语法分析器,与手撸的针对场景优化过的JSON解析器在性能上差距还是挺大的.
2024-08-07 12:27:29
1082
原创 spring:拦截器(HandlerInterceptor)中获取POST请求参数
spring的拦截器(HandlerInterceptor)机制工作在收到HTTP请求之后,参数解析(反序列化)之前阶段。所以拦截器(HandlerInterceptor)中获取POST请求参数本身并不是问题,问题就是要解决。中就可以正常读HttpServletRequest的InputStream,而不影响后续的参数反序列化了。这个阶段,因为请求方法的参数还没有被反序列化,所以要想获取HTTP的请求参数,就要自己从。是单向的,一次性的,如果在拦截器中直接调用。获取了数据,后续方法调用解析参数时再调用。
2024-07-27 15:07:45
2415
7
原创 maven:解决release错误:Artifact updating: Repository =‘releases:Releases‘ does not allow updating
今天执行maven命令将项目发布到maven中央仓库,命令显示执行成功了,但在后台按release意思就是'releases'仓库不允许上传制品。以前遇到的问题是失败,这都好理解,但现在是上传制品已经成功,在后台按close按钮执行制品验证也没问题,就是在按release按钮执行发布时出了错,这种情况第一次遇见。我将版本回退,并在后台删除上传的制品,重新执行一次,反复几次还是同样的问题。根据错误提示在网上找到下面这个讨论。
2024-07-17 17:19:35
602
原创 java:aocache 与Spring Aop兼容问题
本文适用于所有AspectJ与Spring AOP混用的场景。Spring AOP 是基于动态代理的实现AOP,基于 JDK代理和CGLib代理实现运行时织入(runtime weaving)。Spring AOP的切面定义沿用了ASpectJ的注解体系,所以在Spring体系中注解定义切面的方式与ASpectJ完全兼容, 但如果一个项目中有Spring 切面定义又要使用静态态织入(CTW)的情况下,就会存在冲突问题。如下面的示例,项目中定义了一个Spring AOP切面,拦截所有带注解的服务方法。
2024-07-16 11:33:52
543
原创 java:aocache 0.4.0 缓存控制机制
aoocache发布第一个版本0.1.0时,没有考虑到使用aocache的项目对方法缓存的控制需求。给同事做培训时,同事提到这个需求,他希望能够有方法主动去清理指定方法的缓存:他的数据是由其他服务启动时提供的,他的方法要根据这些数据进行复杂计算返回结果。如果其他服务重启了,会刷新这些数据,如果使用aocache提供的方法缓存机制,他就需要有办法能清理这些缓存。
2024-06-29 11:23:04
465
原创 java:aocache的单实例缓存(二)
之前一篇博客介绍了使用注解实现单实例缓存的方式,同时也指出了这种方式的使用限制,就是这个注解定义的构造方法,不能再创建出新实例。为了更灵活方便的实现单实例。aocache最新版本0.4.0增加了支持单实例缓存的工具类SingletonSingleton提供了两种方法分别提供弱引用单实例缓存,和普通强引用单实例。
2024-06-29 10:36:34
453
原创 java:aocache的单实例缓存(一)
定义在构造方法的使用方式是有限制的。因为就无法再创建新实例,如果又希望保持构造方法创建新实例,又能得到单实例缓存。建议不要在构造方法上定义。可以定义在构造方法上,定义在构造方法,该构建方法就成了单实例模式。介绍了aocache的基本使用,也就是说,只要构建方法参数相同,注解注解,而是定义一个有。
2024-06-26 11:20:16
605
原创 java:aocache:基于aspectJ实现的方法缓存工具
最近一直在做一些服务端的设计,经常遇到常量计算的问题,比如获取查找一个类的所有方法,获取有指定注解(Annnotation)的方法并查找注解的上特定的元注解是否有特定的值。比如在服务端方法拦截器上经常执行这样的计算,事实上在运行时,对于一个类(Class)或方法(Method),它在运行时就是个常量,上述复杂计算返回结果也是一个恒定的值不会改变,称之为常量计算。适用于不需要长期保存的数据。如上的模式大概就是一内一外两个方法,内部方法负责真正的计算由缓存对象调用,外部方法则直接从缓存读取数据提供给调用方。
2024-06-26 11:05:50
1470
原创 maven:中央仓库验证方式改变:401 Content access is protected by token
前几天向maven中央仓库发布版本,执行上传命令时报错了:[ERROR][ERROR]我的maven中央仓库的账号注册了好多年了,一直正常使用,没有出现过问题。知道了原因:此错误消息表示您可能通过提供用户名和密码明文验证执行到OSSRH的发布。然而这是以前允许的与OSSRH交互的方式,现在OSSRH发布的身份验证过程的更改了,要求使用用户令牌机制。我们的有关于的文档会对您有所帮助。
2024-06-22 11:08:31
1676
原创 java:Multiple Bounds--类型变量(TypeVariable)定义的高级用法--<A extends ClassA&IfA&IfB >
做Java开发工作好多年了。今天偶然翻到的源码,好奇为什么返回类型是个数组。一般不都是这样用码?T难道还能extends多个类型?同问:不应该是extend,为什么要加个s当复数?才知道类型变量定义还有的概念如下示例:ServiceD定义了A类型变量–,就要求A不仅要是ClassA的子类,还要实现IfA和IfB接口所以ClassC才能满足这个要求,终于明白为什么继承关键字是extends而不是extend,原来用到这儿了。真是又学到了,以想想什么场景需要用到这样的定义。
2024-06-21 14:31:45
331
3
原创 java:类型变量(TypeVariable)解析--基于TypeResolver实现将类型变量替换为实际类型
的类型解析工具(com.google.common.reflect.TypeResolver)将一个类型(java.lang.reflect.Type)中所有类型变量的(TypeVariable)替换为实际类型。中介绍如何如何正确解析泛型类的类型变量(TypeVariable),获取对应的实际类型。的构造方法要求是类型变量(TypeVariable)–实际类型的映射(Map)。将一个类型中的类型变量(TypeVariable)替换中实际类型。,将Map中的键值一个一个添加到TypeResolver对象。
2024-06-21 14:03:32
576
原创 java:类型变量(TypeVariable)解析--获取泛型类(Generic Class)所有的类型变量(TypeVariable)的实际映射类型
如何正确解析泛型类的类型变量(TypeVariable),获取对应的实际类型呢?这是个小众话题,如果何感兴趣请继续往下阅读。javasql程序编译时候ServiceC实例上所有泛型方法的参数变量(TypeVariable)都会匹配为实际的类型。比如方法在经过泛型实例化的SerivceC中:对应的参数应该是。这本是编译自动做的工作,一般来说我们不需要管它是怎么实现的。最近我的工作需要正确一个泛型类的方法正确的泛型参数并String输出,
2024-06-21 12:55:06
921
原创 java:服务端字段保护机制的设计思路/实现及总结
最近在做新的服务端设计时,愈发感受到信息安全在实际应用中的重要性。我们的项目中涉及大量用户信息。这些信息在应用中有的不能对外暴露,有时需要完整提供给第三方,有时只能提供脱敏信息,有时又需要根据实际请求类型来决定是否脱敏,有的数据库字段不允许用户写入。如果完全按以前的逻辑,需要针对每个不同的场景设计不同的逻辑,这些逻辑大部分又是类似或相同的。服务端由多个成员设计,对逻辑的理解程序又可能参差不齐,最终产品的设计质量也会不同.唉,越想越复杂,头疼。穷则思变,难也会思变。面对这越来越复杂的逻辑,
2024-06-17 14:07:39
985
1
CMake脚本在ultraedit中的语法高亮支持
2023-06-08
erpcgen-windows-x86_64.zip
2020-09-17
windows下MSVC兼容的dirent.h
2016-03-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人