当前位置:首页 > CN2资讯 > 正文内容

AOP 动态代理

2天前CN2资讯


Spring AOP使用两种代理机制:基于JDK的动态代理;基于CGLIB的动态代理。之所以需要两种,是因为JDK本身只提供接口的代理,不支持类的代理。



JDK动态代理:java.lang.reflect包下的Proxy, InvocationHandler



1.编写一个handler类实现InvocationHandler接口,invoke方法:



public Object invoke(Object target, Method method, Object[] args) throws Throwable { //代理前逻辑 Object obj = methos.invoke(target, args); //代理后逻辑 return obj; }



2.调用Proxy,



Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler);//三个参数classLoader, interfaces, 实现invocationHandler的类



GCLib动态代理:JDK的限制:只能为接口创建代理实例.



CGLib采用非常底层的字节码技术,可以为一个类创建子类,并在子类中采用方法拦截技术拦截所有父类方法的调用,并顺势织入横切逻辑。



1、创建一个CGLibProxy实现MethodInterceptor



package com.billkang; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class CGLibProxy implements MethodInterceptor { private Enhancer enhancer = new Enhancer(); public Object getProxy(Class clazz) { enhancer.setSuperclass(clazz); //设置需要创建子类的类 enhancer.setCallback(this); return enhancer.create(); //通过字节码技术动态创建子类实例 } public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("代理前逻辑"); Object result = proxy.invokeSuper(obj, args); System.out.println("代理后逻辑"); return result; } }



ForumServiceImpl) cgLibProxy.getProxy(ForumServcieImpl.class);



由于CGlib采用动态创建子类的方式生成代理对象,所以不能对目标类中的final、private方法进行代理。



对于singleton的代理,推荐使用CGlib,对于其他作用域的代理,最好使用JDK,因为CGlib创建代理的时候慢,而创建出的代理对象运动效率极高,而使用JDK代理的表现刚好相反。



    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24561.html

    分享给朋友:

    “AOP 动态代理” 的相关文章

    bwghost全面指南:如何选择、购买和优化搬瓦工VPS服务

    bwghost的基本介绍 bwghost是一个与搬瓦工(BandwagonHost)紧密相关的术语。搬瓦工是一家来自加拿大的VPS服务提供商,专注于提供基于KVM架构的虚拟专用服务器(VPS)。他们的服务覆盖多个地区,包括香港CN2 GIA和洛杉矶DC6 CN2 GIA-E等。搬瓦工的官网是bwg....

    提升上行带宽的有效策略与重要性分析

    上行带宽,这个词在如今的网络环境中变得越来越重要。简单来说,上行带宽是指从用户设备(比如个人电脑或手机)上传数据到服务器的速度。它不仅反映了数据传输的能力,还直接关系到我们的日常使用体验,比如上传文件的速度,发送邮件的及时性,甚至是网络视频会议的流畅性。 上行带宽的特点十分明显。当我进行视频通话或在...

    如何高效使用测速脚本监测网络性能

    在互联网的快速发展中,网络测速变得越来越重要。作为一个互联网用户,了解自己的网络性能是否稳定,以及在不同时间与地点的表现,能帮助我们更好地选择服务和进行问题排查。网络速度直接影响了我们的在线体验,无论是看视频、玩游戏,还是进行远程办公,网络性能都扮演着至关重要的角色。 测速脚本出现在这样的背景下,它...

    DirectAdmin安装全攻略:快速安装与配置指南

    DirectAdmin是一款由国外开发的虚拟主机管理系统。我第一次接触它时,就被其强大的功能和用户友好的界面所吸引。它不仅可以管理服务器,还能帮助我轻松设置EMAIL、DNS、FTP等。这种集中管理的方式大大提高了我的工作效率,尤其是对那些需要频繁处理服务器配置的用户来说,DirectAdmin无疑...

    如何使用NameSilo优惠码享受域名注册折扣

    在寻找域名注册服务时,NameSilo可能是你一个不错的选择。它以其友好的价格和高质量的服务以及多样化的优惠活动而受到用户青睐。尤其当我第一次尝试注册域名时,NameSilo给我的第一印象便是其简单易用的注册流程和丰厚的折扣方式。 使用NameSilo的最大的优势之一,就是能够享受到各种折扣码。许多...

    如何解决甲骨文IP被墙的问题及有效方法

    谈到甲骨文,大家可能会联想到古老的文字和悠久的历史,然而随着信息技术的飞速发展,甲骨文的应用已经不仅仅局限于文化研究。在数据存储、信息管理等领域,甲骨文的IP(互联网协议)在全球范围内发挥着重要的作用。不幸的是,现如今许多用户却发现自己无法正常访问这些IP。这就是我们所说的“甲骨文IP被墙”的现象。...