Aop类关系图与调用关系
2018-11-08 17:49:30 0 举报
AOP所有类关系图与执行过程
作者其他创作
大纲/内容
辅助类
ReflectiveMethodInvocation
ThrowsAdviceAdapter
JoinPoint
包含一个对象
需要变成式的使用
MethodInterceptor
PointCut(切点)
JdkDynamicAopProxy
ProxyFactoryBean
封装了通知(Advice)通知器(Advised)的相关操作,所有生成Aop代理对象的操作过程是一样的,都必须继承这个类
MethodBeforeAdviceInterceptor
DynamicIntroductionAdvice
AspectJProxyFactory
ObjenesisCglibAopProxy
AfterAdvice
1. 每一个具体的拦截器,都封装了一个对应的通知(Advice)2. 都实现了MethodInterceptor的invoke()方法3. 执行的时候根据拦截器类型确定目标函数与增强方法的顺序,调用增强方法使用advice.before() /advice.afterReturning()等方法,调用mi.proceed()执行目标函数的方法
ProxyFactory
Aspect(切面)
执行目标方法
AfterReturningAdvice
ProxyMethodInvocation
DefaultAopProxyFactory
实现了接口
AdvisorAdapterboolean supportsAdvice(Advice advice)getInterceptor(Advisor advisor)
调用了ReflectiveMethodInvocation.proceed()方法执行目标函数,对一个方法对应的调用链里面的依次执行,如果这个方法还有其他增强,则先执行增强,最后在此方法里面通过反射执行目标方法,该方法是递归调用
protected final Object proxy; //代理对象\tprotected final Object target; //目标对象\tprotected final Method method; //目标方法\tprotected Object[] arguments; //目标方法需要的参数\tprivate final Class targetClass; //目标类\t//通知器(Advisor)和MethodMatcher对象\tprotected final List interceptorsAndDynamicMethodMatchers;\tprivate int currentInterceptorIndex = -1; //执行方法时遍历的起始位置 @Override\tpublic Object proceed() throws Throwable {} //方法真正执行的地方
Advice执行增强方法
ProxyConfig
数据基类,为子类提供了配置属性
调用proceed()方法执行
ThrowsAdvice
Invocation
包含一个AopProxyFactory对象,用来生成代理对象
BeforeAdvice
代理对象的生成
具体的生成Proxy对象的类
CglibMethodInvocation
JoinPoint将目标对象,代理对象等全部封装起来,用来连接目标类与代理类
相当于调用
创建一个指定类型的拦截器
MethodBeforeAdviceAdapter
没实现接口
AfterReturningAdviceAdapter
将AspectJ于Spring关联起来
AopProxyFactory
ProxyCreatorSupport
Advice(通知)
createAopProxy(AdviseSupport)
Advisor(将切点与通知关联起来)
Interceptor
IOC容器中通过声明式配置,创建代理对象
MethodInvocation
从Advisor对象中得到一个MethodInterceptor对象
MethodBeforeAdvice
AfterReturningAdviceInterceptor
Advice
AdvisedSupport
收藏
0 条评论
回复 删除
下一页