Spring: AOP实现

Spring AOP

Spring AOP实现中,使用的核心技术是动态代理,代理的方式分为:JDK代理和CGLib代理。

Spring AOP的实现大体上和之前的博客类似 动手写web框架(8): AOP实现,都是将拦截器链配置到动态代理生成的对象中,然后拦截器在代理对象中起作用是通过对拦截器方法的回调来完成的,在完成某一拦截器的方法回调时,还需要推进整个拦截器链的执行,最终执行完所有拦截器方法回调后再对目标对象的方法进行调用。

Spring AOP和Mybatis插件

通过对比Spring AOP和Mybatis插件的原理,可以发现两者是类似的,都是通过动态代理来完成拦截器链的调用。

它们的区别在于:Spring AOP是将拦截器链配置到动态代理生成的对象中,然后对拦截器的方法进行回调;而Mybatis插件则是层层代理,每个拦截器会对上一次产生的代理对象再次生成代理。

不知道Mybatis这样是否合理,当有多个插件配置时,会层层生成代理对象?