Spring02——实现动态代理拦截器

本文介绍了两种实现动态代理的方法:一种是使用JDK提供的Proxy类和InvocationHandler接口;另一种是使用cglib第三方库。前者适用于实现了接口的情况,后者适用于未实现接口的类。文章通过实例演示了如何使用这两种方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现动态代理的2种方式

第一种:  用JDK提供的Proxy代理类InvocationHandler调用处理类  配合起来可以拦截一个接口下面的实现类,拦截它的方法,这样可以在它之前做点事情之后做点事情都可以。不过使用JDK这种方式必须实现接口才可以。优势:使用反射创建对象,创建效率高。

面向接口编程    spring里默认用jdk方式。为啥?都有接口,面向接口编程的。下面来实现一个小练习实践理解

①自定义一个接口

img_2648bcda27bed3d42c391540c68d082d.png

②写一个接口实现类

img_2f236d452544c044f2f05af065d5b06a.png

③写一个拦截

img_69e0028a1fe3863611b37ccb63db811d.png

④主函数调用

img_14346f77047c3cf23f574bba08127767.png

第二种: 用cglib第三方库,它是用asm   这是搞class字节码的,这种方式基于子类的,基于继承,如果类没有接口就可以用这种方式。优势:执行效率高

①创建一个练习类

img_9aada11b663a859b52e79a0add00f4e2.png

②创建一个代理类

img_2c9cf0ffae77b37255302dbd1dcbf87d.png

③主函数调用

img_5b14dd7917dfe6f310426c87b281888d.png

运行效果:

img_d27f2995116dbc246b5c3af70c695172.png

上面例子举得不是很好,一般在拦截到类和方法后可以干点拦截前拦截后的事情,再举个例子,比如io流操作拦截到后要close掉,可有时为了效率好则希望把它放入连接池里,下次需要再调用,但是一close掉就销毁了,所以可以在拦截到后再拦截前就把它放入连接池,这次就算close掉也已经放入连接池里下次可以直接拿来用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值