博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java提供类与cglib包实现动态代理
阅读量:5914 次
发布时间:2019-06-19

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

hot3.png

    终于有点空余时间,决定把之前学习的知识点整理一下,备以后复习。

    动态代理有三角色:抽象角色,代理角色,真是角色。

第一个记录下java提供的动态代理。即使用Proxy类和InvocationHandel接口。直接上贴上代码:

class MyInvocationHandel implements InvocationHandler{	private Object obj; //这是原对象	//传入源对象,返回代理对象	public Object bind(Object obj){		this.obj=obj;		return Proxy.newProxyInstance(obj.getClass().getClassLoader(),				obj.getClass().getInterfaces(), this);	}	public Object invoke(Object proxy, Method method, Object[] args)			throws Throwable {		System.out.println("用户验证成功");		Object object=method.invoke(obj, args);		System.out.println("日志记录:xxx在xx时刻调用了"+method.getName());		return object;	}	}
    通过invocationHandel接口可以代理对象的方法,我们可以加入日志记录等等,代码很简单,功能很强大。

第二个记录下通过cglig包实现的动态代理,比java提供的动态代理优点在于可以提供抽象类方法的代理(不知这样说准确不)。要使用这种代理首先需要导入cglib.jar和asm.jar,然后使用Enhancer类与MethodInterceptor接口,代码:

public class CGlibFactory implements MethodInterceptor{	private Object targerObj; //原对象	        //通过原对象返回代理对象	public Object createInstance(Object targerObj){		this.targerObj = targerObj;		Enhancer en = new Enhancer();		return en.create(this.targerObj.getClass(),this.targerObj.getClass().getInterfaces(),this);	}	public Object intercept(Object proxy, Method method, Object[] args,			MethodProxy methodProxy) throws Throwable {		System.out.println("用户验证...");		Object result= methodProxy.invoke(targerObj, args);		System.out.println("xx用户调用xx方法");		return result;	}}

转载于:https://my.oschina.net/kyle1970/blog/91086

你可能感兴趣的文章
手机前端开发调试利器 vConsole
查看>>
入门级五星好书之《编码》【推荐】
查看>>
ljohn_ops常用脚本集合帖
查看>>
从Exchange 通往Office 365系列(十七)通过活动目录同步创建用户
查看>>
Android(& Tizen Web App) Designer 所见即所得
查看>>
txt形式进行传输WebShell图文演示!
查看>>
JS推拉门式的菜单导航
查看>>
Python自动化开发学习5-2-subprocess模块
查看>>
项目人力资源管理重点
查看>>
2014阅读文章
查看>>
财报解读:腾讯开放战略效果凸显 Q2收入继续领先
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Linux根目录下的文件结构
查看>>
newinstance()和new有什么区别?
查看>>
补充F5 LTM访问控制策略功能
查看>>
NBU备份DB2
查看>>
java final
查看>>
Java基础学习第四天
查看>>
Linux 系统目录结构
查看>>