cglib实现动态代理(二)
来源:互联网 发布:最新英雄联盟比赛数据 编辑:程序博客网 时间:2024/06/01 20:40
JDK实现动态代理需要代理类实现接口,这导致在使用中有很大的局限性,毕竟不是所有类都需要实现接口。而cglib通过继承的方式动态产生代理类,cglib是动态代理框架,功能很强大。
改造上节中的日志代理:
/** * cglib的处理器 * */public class LogProxyCglib implements MethodInterceptor {private Object target; public Object newProxyInstance(Object target) { this.target = target; //增强类 Enhancer enhancer = new Enhancer(); //代理类父类,通过继承的方式 enhancer.setSuperclass(this.target.getClass());
//多个拦截器 NoOp.INSTANCE 是 CGlib 所提供的实际是一个没有任何操作的拦截器,他们是有序的 enhancer.setCallbacks(new Callback[]{this,NoOp.INSTANCE}); //添加过滤器,最执行的方法进行过滤 enhancer.setCallbackFilter(new LogProxyFilter()); // 创建代理对象 return enhancer.create(); } //扩展模块private void before(String name){System.out.println(name+"方法执行开始!");}//扩展模块private void after(String name){System.out.println(name+"方法执行结束!");}public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {before(method.getName());proxy.invokeSuper(obj, args); after(method.getName());return null;}}
/** * 日志代理过滤器:查询方法不需要记录日志 * */public class LogProxyFilter implements CallbackFilter{public int accept(Method method) {//返回值是拦截器的索引。如果是query则使用第二个拦截器,即不进行处理
if("query".equalsIgnoreCase(method.getName())) return 1; return 0; }}
public static void main(String[] args) {//Service service = (Service)(new LogProxyHandler()).newProxyInstance(new UserServiceImpl());Service service=(Service)(new LogProxyCglib()).newProxyInstance(new UserServiceImpl());service.add();service.query();}
运行结果:只对add()进行前后处理
参考:http://blog.csdn.net/qq_25689397/article/details/51427164
http://www.cnblogs.com/cruze/p/3865180.html#lable3
阅读全文
0 0
- cglib实现动态代理(二)
- 二.cglib实现动态代理
- CGLIB实现动态代理
- CGLIB实现动态代理
- cglib实现动态代理
- CGLib实现动态代理
- cglib 实现动态代理
- cglib动态代理实现
- 详解Java动态代理机制(二)----cglib实现动态代理
- 系统架构设计——设计模式之代理模式(二)CGLIB动态代理实现
- 设计模式学习之代理模式(二)--CGLIB实现对Class动态代理
- cglib动态代理介绍(二)
- cglib动态代理介绍(二)
- cglib动态代理介绍(二)
- cglib动态代理介绍(二)
- cglib动态代理介绍(二)
- java代理技术二(Cglib实现)
- Cglib实现动态代理原理
- bex5学习
- 评职称如何发表论文
- 强制类型转换
- 【算法】蛇形填数
- poj-1350Cabric Number Problem
- cglib实现动态代理(二)
- 第2章 用户、文件操作与联机帮助:编写who命令
- excel/csv等表格导出数据数字类型过长出现科学计数法的解决方案
- Okhttp实现上传图片
- spring 注解@PathVariable和@RequestParam的区别
- SSM框架
- 爬虫学习笔记--识别验证码
- windows下安装AnyProxy抓取移动App Http请求
- JavaScript DOM操作Select下拉框