java ssssss,Javasssist的简单使用

动机

前两天在项目中遇到了一个关于webflow的问题。在访问页面时,老是提示无法找到流转节点。后来跟源码发现webflow在记录流转节点的时候做了个数限制,最多只能存5个流转节点。于是怀疑时跳转判断流程太多,导致原来存储的流转节点被后来新生成的流转节点覆盖了(后来发现不是)。于是想修改webflow记录的流程节点个数限制。那么问题来了,这个东西并没有在Spring里面配置,而是直接写在代码里面了,只能通过修改Class文件来修改个数限制。于是找出了Javasssist这个神器。

用法

1引入要修改的class文件所在的jar包

修改引入javassist的jar包

修改代码

public static void main(String[] args) throws InvalidByteCodeException, IOException, NotFoundException, CannotCompileException { ClassPool pool = ClassPool.getDefault(); //读取要修改的class文件 CtClass cc = pool.get("org.springframework.webflow.conversation.impl.SessionBindingConversationManager"); //拿到要修改的方法 CtMethod m = cc.getDeclaredMethod("beginConversation"); //在这个方法前增加语句,设置个数为-1(其实就是不做个数限制) m.insertBefore("setMaxConversations(-1);"); //拿到要修改的方法 m = cc.getDeclaredMethod("getConversationContainer"); //在这个方法前增加语句,设置个数为-1(其实就是不做个数限制) m.insertBefore("setMaxConversations(-1);"); //将文件写到本地 cc.writeFile("G:\\SessionBindingConversationManager.class"); }

总结

修改不仅可以修改已经生成的class文件(包括新增方法,修改方法等),还可以生成class文件,可以说是非常方便的,在我们写代码遇到瓶颈,或者在排查现场问题,而又缺失源码的时候,不妨可以试一试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值