二.cglib实现动态代理
来源:互联网 发布:义隆单片机 图书 编辑:程序博客网 时间:2024/05/17 16:47
实现cglib动态代理需要导入jar包,我这里是从spring项目中直接拿过来的com.springsource.net.sf.cglib-2.1.3.jar
看代码
package com.lzzl.cglibproxy;public class Person { public void doSomething(){ System.out.println("dosomething"); }}package com.lzzl.cglibproxy;import java.lang.reflect.Method;import net.sf.cglib.core.DebuggingClassWriter;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class cglibProxyFactory implements MethodInterceptor{ @Override public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodproxy) throws Throwable { Object result; if(proxy instanceof Person){ if("doSomething".equals(method.getName())){ System.out.println("doSomething 前"); result = methodproxy.invokeSuper(proxy, args); System.out.println("doSomething 后"); return result; } } return methodproxy.invokeSuper(proxy, args); } public Object createProxy(Class clazz){ //这里是为了生成字节码文件到指定文件夹下面 System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "E:\\work\\myeclipsework\\DynamicProxy\\generateFile\\cglib"); Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(clazz); enhancer.setCallback(this); return enhancer.create(); }}
测试下
package com.lzzl.cglibproxy;public class runcglibproxytest { public static void main(String[] args) { cglibProxyFactory proxyfc = new cglibProxyFactory(); Person proxy = (Person) proxyfc.createProxy(Person.class); proxy.doSomething(); }}
打印:
CGLIB debugging enabled, writing to ‘E:\work\myeclipsework\DynamicProxy\generateFile\cglib’
doSomething 前
dosomething
doSomething 后
生成的文件如下
生成的文件有很多,所以在项目中一般如果是单例类的话使用cglib动态代理的比较多。
阅读全文
0 0
- 二.cglib实现动态代理
- cglib实现动态代理(二)
- CGLIB实现动态代理
- CGLIB实现动态代理
- cglib实现动态代理
- CGLib实现动态代理
- cglib 实现动态代理
- cglib动态代理实现
- cglib动态代理介绍(二)
- cglib动态代理介绍(二)
- cglib动态代理介绍(二)
- cglib动态代理介绍(二)
- cglib动态代理介绍(二)
- Cglib实现动态代理原理
- Cglib实现动态代理原理
- cglib动态代理实现原理
- cglib 动态代理实现AOP
- Cglib 实现动态代理Proxy
- mapgis 由遥感影像图得到某一地块的面积
- Python 学习路线
- 2、Java堆内存/方法区(Non-Heap)
- 价值百万的思维方式
- indexOf()
- 二.cglib实现动态代理
- java 中的io
- MySQL数据库事务实例(模拟银行转账)
- 总结
- Activity四种启动模式
- 'UIAlertView' is deprecated的解决例子
- Android 插件化
- 大数据学习之路-第01天-Centos中安装Hadoop
- Java IO: 字符流的Buffered和Filter