代理知识

代理模式

代理就是对目标方法的增强。

比如:在执行目标方法时,需要开启事务和提交事务这些动作,可以称其为增强动作。

那么把需要目标方法单独写一个目标类,把需要增强的动作单独写一个增强类,然后再写一个代理类用于把增强动作和目标方法结合起来

这样就实现解耦合,即业务类只专注业务,其他的增强动作另外编写代码,最后只需要使用代理对象即可。

代理分为:静态代理、动态代理


静态代理

静态代理在程序运行之前,代理类的.class文件就已经存在了。

静态代理需要手动创建代理类需要和目标类实现同样的接口,在其实现增强方法和目标方法的结合。

静态代理的可重用性不高,代码重复度较高,当目标类较多时需手动创建的代理类数量较多。


动态代理

动态代理是在程序运行期间,动态拼接生成.class文件。

动态代理包含:JDK动态代理、cglib动态代理(通过ASM实现生成字节码文件)

(1)JDK动态代理
在生成代理对象的时候,需要实现一个拦截器InvocationHandler接口,增强动态和目标动作的具体结合逻辑就是在拦截器(invoke方法)里实现的

JDK动态代理要求目标类实现接口。

(2)cglib动态代理
它是一个第三方提供的jar包,首先需要导入jar包。其在生成代理对象的时候,需要实现一个Interceptor接口,增强动态和目标动作的具体结合逻辑在intercept方法里实现

cglib动态代理是基于继承来实现代理的,所以无法对final类、private方法和static方法进行处理。

posted @ 2025-05-26 00:29  巴啦啦飞上天  阅读(22)  评论(0)    收藏  举报