Spring学习(十)--Spring的AOP

1、Spring AOP拦截器

(1)设计原理

Spring AOP在通过JDK的Proxy或者CGLIB方式生成代理对象的时候,拦截器的相关信息就配置到代理对象中了。

1)如果使用JDK的Proxy方式生成的代理对象,需要通过InvocationHandler方法来设置拦截器回调。

Proxy代理对象调用:proxy.NewProxyInstance(classloader,proiedInterfaces,this);其中this就是InvocationHandler,InvocationHandler是JDK定义的反射类的接口。

2)如果使用CGLIB方式生成的代理对象,需要通过DynamicAdvisedInterceptor完成回调

DynamicAdvisedInterceptor方法实现在intercept方法中,intercept回调方法和InvocationHandler回调的方式基本一样,只是在CGLIB2AOPProxy中构造CglibMethodINvocation对象来完成拦截器链的调用,而在JdkDynamicAOPProxy中是通过构造ReflectiveMethodInvocation对象来完成的。

3)目标方法的调用

JDKDynamicAopProxy代理对象的方法调用通过AopUntils使用反射机制在AopUntils.InvokeJoinpointUsingReflection的方法中实现的。首先得到调用方法的反射对象,然后使用invoke启动对方法反射对象的调用。

Spring学习(十)--Spring的AOP

4)AOP拦截器链的调用

对拦截器链调用都是在ReflectiveMethodInvocation中通过proceed方法中实现的,在方法中,回逐个运行拦截器的拦截方法。

Spring学习(十)--Spring的AOP

 

上一篇:JavaScript 求最大公约数


下一篇:剑指 Offer 63. 股票的最大利润