Spring AOP工作机制

Advice

      拦截器接口:


Spring AOP工作机制_第1张图片

PointCut

      包括一个ClassFilter,用于匹配Class;一个MethodMatcher,用于匹配所调用的参数:

Spring AOP工作机制_第2张图片

Advisor

      包括一个pointcut、一个advice:


Spring AOP工作机制_第3张图片

生成代理类实例

      步骤:

1)将ProxyFactoryBean属性interceptorNames对应的bean转化为Advisor,加入到advisors中;

2)如果ProxyFactoryBean属性singleton为true,则ProxyFactoryBean创建的代理类为单例,否则为prototype类型;

3)获取被代理类实例target;

4)用AopProxyFactory实例(默认为DefaultAopProxyFactory实例)创建AopProxy:如果代理类需要优化或基于类生成代理类或没有提供需要代理的接口即interceptorNames为空,则创建CglibAopProxy,否则创建JdkDynamicAopProxy;

5)利用CglibAopProxy或JdkDynamicAopProxy动态生成代理类实例,JdkDynamicAopProxy是借助Proxy.newProxyInstance生成代理类实例。

Spring AOP工作机制_第4张图片Spring AOP工作机制_第5张图片

拦截机制

      步骤:

1)代理类实例的调用会调用JdkDynamicAopProxy invoke方法;

2)获取ProxyFactoryBean中的advisors,对其进行for循环;

3)用advisor的pointcut中的classFilter匹配targetClass,用该advisor的pointcut中的methodMatcher匹配所调用的方法,如都匹配,则获取该advisor对应的methodInterceptors;

4)用代理类实例、被代理类Class、被代理类实例、所调用的方法和参数、匹配的methodInterceptors参数new ReflectiveMethodInvocation实例;

5)调用ReflectiveMethodInvocation实例进行所调用方法的拦截及执行。

Spring AOP工作机制_第6张图片


参考:

Spring AOP介绍及源码分析:http://www.uml.org.cn/j2ee/201301102.asp

你可能感兴趣的:(Spring)