ProxyFactory源码流程分析

2021-08-31  本文已影响0人  s1991721

先导

先看两张图

类关系 调用时许图

设计模式

1、时序图中ProxyCreatorSupport之前的类采用了基本的抽象继承,来配置参数(继承)及赋予能力(实现)

2、DefaultAopProxyFactory为工厂模式,根据ProxyConfig的配置参数决定具体实现

最终的实现类如图

源码版本:spring-aop-5.2.6.RELEASE

流程分析

使用场景描述:

代码实现

image.png

拦截逻辑

JdkDynamicAopProxy

AopProxyUtils.completeProxiedInterfaces
获取被代理类的接口列表信息

findDefinedEqualsAndHashCodeMethods(proxiedInterfaces)
判断接口是否存在equal、hash方法

Proxy.newProxyInstance(classLoader, proxiedInterfaces, this)
在运行时创建一个实现某些给定接口的新类(也称“动态代理类”)及其实例(对象),代理的是接口(Interfaces),不是类(Class),也不是抽象类。在运行时才知道具体的实现

newProxyInstance,方法有三个参数:

java动态代理

触发内部的invoke方法

image.png

由于使用了代理,所以equal、hash方法需要单独处理

method.getDeclaringClass()获取声明方法的类,如果是DecoratingProxy,则AopProxyUtils.ultimateTargetClass返回被代理类的类型

advised.opaque是否能转换成Advised默认false,触发method的类为interface且是Advised的子类,直接invoke

责任链相关内容:
常见设计模式总结
全面深入OkHttp源码(下)

CglibAopProxy

创建enhancer增强器

设置回调

至此所有调用都会触发设置的callback

上一篇 下一篇

猜你喜欢

热点阅读