全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java CGLib动态代理机制(全面解析)

一、首先说一下JDK中的动态代理:

JDK中的动态代理是通过反射类Proxy以及InvocationHandler回调接口实现的

但是,JDK中所要进行动态代理的类必须要实现一个接口,也就是说只能对该类所实现接口中定义的方法进行代理,这在实际编程中具有一定的局限性,而且使用反射的效率也并不是很高。

二、使用CGLib实现:

使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生成框架,使用字节码技术生成代理类,比使用Java反射效率要高。唯一需要注意的是,CGLib不能对声明为final的方法进行代理,因为CGLib原理是动态生成被代理类的子类。

下面,将通过一个实例介绍使用CGLib实现动态代理。

1、被代理类:

首先,定义一个类,该类没有实现任何接口,包含两个方法。

public class ConcreteClassNoInterface { 
 public String getConcreteMethodA(String str){ 
  System.out.println("ConcreteMethod A ... "+str); 
  return str; 
 } 
 public int getConcreteMethodB(int n){ 
  System.out.println("ConcreteMethod B ... "+n); 
  return n+10; 
 } 
}

2、拦截器:

定义一个拦截器。在调用目标方法时,CGLib会回调MethodInterceptor接口方法拦截,来实现你自己的代理逻辑,类似于JDK中的InvocationHandler接口。

public class ConcreteClassInterceptor implements MethodInterceptor{ 
 public Object intercept(Object obj, Method method, Object[] arg, MethodProxy proxy) throws Throwable { 
  System.out.println("Before:"+method); 
  Object object=proxy.invokeSuper(obj, arg); 
  System.out.println("After:"+method); 
  return object; 
 } 
} 

参数:Object为由CGLib动态生成的代理类实例,Method为上文中实体类所调用的被代理的方法引用,Object[]为参数值列表,MethodProxy为生成的代理类对方法的代理引用。

返回:从代理实例的方法调用返回的值。

其中,proxy.invokeSuper(obj,arg):

调用代理类实例上的proxy方法的父类方法(即实体类ConcreteClassNoInterface中对应的方法)

在这个示例中,只在调用被代理类方法前后各打印了一句话,当然实际编程中可以是其它复杂逻辑。

3、生成动态代理类:

Enhancer enhancer=new Enhancer(); 
enhancer.setSuperclass(ConcreteClassNoInterface.class); 
enhancer.setCallback(new ConcreteClassInterceptor()); 
ConcreteClassNoInterface ccni=(ConcreteClassNoInterface)enhancer.create(); 

这里Enhancer类是CGLib中的一个字节码增强器,它可以方便的对你想要处理的类进行扩展,以后会经常看到它。

首先将被代理类ConcreteClassNoInterface设置成父类,然后设置拦截器ConcreteClassInterceptor,最后执行enhancer.create()动态生成一个代理类,并从Object强制转型成父类型ConcreteClassNoInterface。

最后,在代理类上调用方法:

ccni.getConcreteMethodA("shensy"); 
ccni.getConcreteMethodB(0); 

查看控制台输出:

Before :public java.lang.String generic.cglib.proxy.ConcreteClassNoInterface.getConcreteMethodA(java.lang.String) 
ConcreteMethod A ... shensy 
After :public java.lang.String generic.cglib.proxy.ConcreteClassNoInterface.getConcreteMethodA(java.lang.String) 
Before :public int generic.cglib.proxy.ConcreteClassNoInterface.getConcreteMethodB(int) 
ConcreteMethod B ... 0 
After :public int generic.cglib.proxy.ConcreteClassNoInterface.getConcreteMethodB(int) 

可以看到,拦截器在调用被代理类方法前后都执行了print操作。

以上这篇Java CGLib动态代理机制(全面解析)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# java  # 动态代理  # cglib  # Java基础之动态代理Cglib详解  # 详解Java Cglib动态代理  # Java使用JDK与Cglib动态代理技术统一管理日志记录  # JAVA中的静态代理、动态代理以及CGLIB动态代理总结  # java 中动态代理(JDK  # cglib)实例代码  # 深入理解java动态代理的两种实现方式(JDK/Cglib)  # Java 动态代理与CGLIB详细介绍  # 浅谈Java代理(jdk静态代理、动态代理和cglib动态代理)  # java动态代理和cglib动态代理示例分享  # java动态代理(jdk与cglib)详细解析  # Java cglib动态代理原理分析  # 拦截器  # 给大家  # 能对  # 回调  # 自己的  # 的是  # 在这个  # 子类  # 对你  # 有一定  # 很高  # 希望能  # 不受  # 可以看到  # 将被  # 实体类  # 它可以  # 只在  # 这篇  # 这在 


相关文章: 家具网站制作软件,家具厂怎么跑业务?  网站制作企业,网站的banner和导航栏是指什么?  如何在自有机房高效搭建专业网站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  C#如何使用XPathNavigator高效查询XML  广州商城建站系统开发成本与周期如何控制?  南京网站制作费用,南京远驱官方网站?  模具网站制作流程,如何找模具客户?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  制作网站的公司有哪些,做一个公司网站要多少钱?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  江苏网站制作公司有哪些,江苏书法考级官方网站?  如何在万网主机上快速搭建网站?  如何快速查询网站的真实建站时间?  建站之星好吗?新手能否轻松上手建站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何撰写建站申请书?关键要点有哪些?  详解jQuery中基本的动画方法  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  如何使用Golang安装API文档生成工具_快速生成接口文档  家庭服务器如何搭建个人网站?  盘锦网站制作公司,盘锦大洼有多少5G网站?  建站主机选购指南与交易推荐:核心配置解析  Swift中switch语句区间和元组模式匹配  外贸公司网站制作,外贸网站建设一般有哪些步骤?  建站org新手必看:2024最新搭建流程与模板选择技巧  建站之星备案是否影响网站上线时间?  宝塔建站后网页无法访问如何解决?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  免费视频制作网站,更新又快又好的免费电影网站?  如何挑选优质建站一级代理提升网站排名?  济南企业网站制作公司,济南社保单位网上缴费步骤?  制作网站的模板软件,网站怎么建设?  如何在云主机上快速搭建网站?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  常州企业网站制作公司,全国继续教育网怎么登录?  定制建站哪家更专业可靠?推荐榜单揭晓  如何通过商城自助建站源码实现零基础高效建站?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  如何在阿里云通过域名搭建网站?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  制作网站的基本流程,设计网站的软件是什么?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  如何获取免费开源的自助建站系统源码?  寿县云建站:智能SEO优化与多行业模板快速上线指南  建设网站制作价格,怎样建立自己的公司网站?  建站上市公司网站建设方案与SEO优化服务定制指南  魔毅自助建站系统:模板定制与SEO优化一键生成指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。