Java JDK和cgLib动态代理
发布日期:2021-06-27 04:25:04 浏览次数:10 分类:技术文章

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

JDK

public class JdkProxy implements InvocationHandler {
//目标类 private Object targetObject; //获取代理对象 public Object newProxyInstance(Object targetObject){
this. targetObject = targetObject; //绑定关系,也就是和具体的哪个实现类关联 return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(),this); } public Object invoke(Object proxy, Method method, Object[] args) {
Object result = null; try{
System.out.println("通过JDK动态代理调用 "+method.getName() +", 打印日志 begin"); result = method.invoke(targetObject,args); System.out.println("通过JDK动态代理调用 "+method.getName() +", 打印日志 end"); }catch (Exception e){
e.printStackTrace(); } return result; }}

cgLIB

public class CglibProxy  implements MethodInterceptor {
//目标类 private Object targetObject; //绑定关系 public Object newProxyInstance(Object targetObject){
this.targetObject = targetObject; Enhancer enhancer = new Enhancer(); //设置代理类的父类(目标类) enhancer.setSuperclass(this.targetObject.getClass()); //设置回调函数 enhancer.setCallback(this); //创建子类(代理对象) return enhancer.create(); } public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
Object result = null; try{
System.out.println("通过CGLIB动态代理调用 "+method.getName() +", 打印日志 begin"); result = methodProxy.invokeSuper(o,args); System.out.println("通过CGLIB动态代理调用 "+method.getName() +", 打印日志 begin"); }catch (Exception e){
e.printStackTrace(); } return result; }}

转载地址:https://blog.csdn.net/weixin_42166320/article/details/107472338 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:采用jmeter对接口进行压测(对比采用Guava缓存前后)
下一篇:SpringBoot2.x 自定义返回全局错误页面

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月25日 08时24分11秒