博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java javassist动态代理
阅读量:5207 次
发布时间:2019-06-14

本文共 1635 字,大约阅读时间需要 5 分钟。

1 package org.windwant.spring.core.proxy; 2  3 import javassist.ClassPool; 4 import javassist.CtClass; 5 import javassist.CtMethod; 6  7 /** 8  * Created by windwant on 2016/9/18. 9  */10 public class MyJavassistProxy {11 12     public Object getProxySelf(String clazz, String pClazz, String methodName, String methodBefore, String methodAfter){13         ClassPool cp = ClassPool.getDefault();14         CtClass ct;15         try {16             ct = cp.get(clazz);17             if(pClazz != null){18                 ct.setSuperclass(cp.get(pClazz));19             }20             ct.writeFile();21             ct.defrost();22             CtMethod m = ct.getDeclaredMethod(methodName);23             if(methodBefore != null) {24                 m.insertBefore(methodBefore);25             }26             if(methodAfter != null) {27                 m.insertAfter(methodAfter);28             }29             Class c = ct.toClass();30             return c.newInstance();31         } catch (Exception e) {32             e.printStackTrace();33         }34         return null;35     }36 37 }
1 public void testJavassist(){ 2         String clazz = "org.windwant.spring.core.proxy.Hello"; 3         String methodBefore = "{ System.out.println(\"method before...:\"); }"; 4         String methodAfter = "{ System.out.println(\"method after...:\"); }"; 5         String pClazz = "org.windwant.spring.core.proxy.HelloP"; 6  7         Hello hello = (Hello) new MyJavassistProxy().getProxySelf(clazz, null, "say", 8                 methodBefore, methodAfter); 9         hello.say();10     }

 

转载于:https://www.cnblogs.com/niejunlei/p/5989922.html

你可能感兴趣的文章
Distel = Emacs erlang-mode++
查看>>
worksheets 和 sheets 的不同
查看>>
eclipse修改主题配色
查看>>
多线程
查看>>
WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping
查看>>
Activity class {com.../com....MainActivity} does not exist.
查看>>
Qt重写paintEvent方法遇到的问题
查看>>
Sql常见面试题 受用了
查看>>
关闭进程&关闭消息队列
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
vim在同一个窗口中同时编辑多个文件
查看>>
CSS背景颜色、背景图片、平铺、定位、固定
查看>>
Linux相关——记一些ubuntu相关快捷键&操作(持续更新)
查看>>
口胡:[HNOI2011]数学作业
查看>>
我的第一个python web开发框架(29)——定制ORM(五)
查看>>
Java中写文件操作
查看>>
js,jquery,css,html5特效
查看>>
python 进程池Pool以及Queue的用法
查看>>
while 循环、格式化输出、运算符
查看>>
Combination Sum III -- leetcode
查看>>