cglib 动态代理 解释

简介:

上篇文章说的JDK的动态代理,下面我们来讲讲cglib动态代理的实现。

其实你会发现JDK的动态代理,是对接口的,没有对普通的类,怎么办,CGLIB可以解决的这个事,你会

发现啊,原声的总是太麻烦的,很多框架都是在原声的基础上做一些文章,比如Netty,对nio封装,简化

开发,curator对zookeeper封装,简化api开发,都是简化后然后开发出一些新技能,稍大点的公司,干脆

就最市场上留出的框架自己开发出适合自己公司技术体系的框架。


上代码吧,

import net.sf.cglib.proxy.Enhancer;

import net.sf.cglib.proxy.MethodInterceptor;

import net.sf.cglib.proxy.MethodProxy;


CGLIB增强主要有这几个类,ENhancer,MethodInterceptor,MethodProxy


public class CglibTest {


//普通类

@Test

public void testCglibProxy() {

final NewsSpider newsSpider = new NewsSpider();

Enhancer enhancer = new Enhancer();

enhancer.setSuperclass(newsSpider.getClass());

enhancer.setCallback(new MethodInterceptor() {

@Override

public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {

// TODO Auto-generated method stub

System.out.println(" 在调动方法处理前做。。。。。。。。。 ");

Object object = method.invoke(newsSpider, args);

System.out.println(" 在调动方法处理后做。。。。。。。。。 ");

return object;

}

});

NewsSpider ns = (NewsSpider) enhancer.create();

ns.createNewsSpider("细节--");

}

//接口

@Test

public void testCgligInterfaceProxy() {

final SpiderOrderImpl spiderOrder = new SpiderOrderImpl();

Enhancer en = new Enhancer();

en.setSuperclass(SpiderOrder.class); //设置接口类  cglib增强类

en.setCallback(new MethodInterceptor() {

@Override

public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {

// TODO Auto-generated method stub

System.out.println(" 在调动方法处理前做。。。。。。。。。 ");

Object object = method.invoke(spiderOrder, args);

System.out.println(" 在调动方法处理后做。。。。。。。。。 ");

return object;

}

});

SpiderOrder enSpiderOrder = (SpiderOrder) en.create(); 

enSpiderOrder.crawlingSpider();

}

}


如果有找不到那个相关类,在我的上一篇文章里有写到。


spring的aop两个代理底层基础是这样的,那么我们下片文章会说说spring aop,是怎么回事,有些人只会用spring框架,项目框架

搭建好了,能用,再加上业务多,很多开发人员很少有去真正静下心来,学学一些基础知识。



本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1914333

相关文章
|
存储 算法 编译器
C/C++编译器局部优化技术:局部优化是针对单个函数或基本块进行的优化
C/C++编译器局部优化技术:局部优化是针对单个函数或基本块进行的优化
381 0
|
1月前
|
人工智能 运维 安全
|
1月前
|
SQL 关系型数据库 API
如何开发工程项目部管理系统中的质量管理板块(附架构图+流程图+代码参考)
本文详解如何构建工程项目管理系统中的质量管理模块,涵盖质量检查计划、检查登记、问题清单、整改记录及问题看板五大核心功能。内容包括系统架构设计、业务流程、数据模型、API接口、开发技巧及上线建议,助力实现质量风险的数字化闭环管理,提升项目验收效率与合规性。
|
9月前
|
存储 监控 安全
网络设备日志记录
网络设备日志记录是追踪设备事件(如错误、警告、信息活动)的过程,帮助IT管理员进行故障排除和违规后分析。日志详细记录用户活动,涵盖登录、帐户创建及数据访问等。为优化日志记录,需启用日志功能、管理记录内容、区分常规与异常活动,并使用专用工具进行事件关联和分析。集中式日志记录解决方案可收集并统一管理来自多种设备和应用的日志,提供简化搜索、安全存储、主动监控和更好的事件可见性,增强网络安全。常用工具如EventLog Analyzer能灵活收集、存储和分析日志,确保高效管理。
528 5
|
JavaScript
Vue多图组合走马灯
这篇文章介绍了如何在Vue框架中创建一个多图组合的走马灯组件,允许自定义滑动间隔和图片区域宽度,以展示多个图片。
200 0
Vue多图组合走马灯
|
存储 虚拟化 数据中心
OpenStack常见问题
【8月更文挑战第20天】
186 3
|
Unix Shell Linux
在Linux中,什么是 BASH?
在Linux中,什么是 BASH?
PullToRefresh的简单使用
PullToRefresh的简单使用
287 1