天天看点

Spring AOP中的动态代理实现机制

AOP中的目标对象(target object),也被称为是advised object,是在pointcut处插入aspect时所执行的advice方法中所用到的对象。有点罗嗦,请慢慢体会。

任何一个target object都是通过动态代理机制创建的,以实现在运行时被动态插入。

本文介绍Spring AOP中的动态代理实现机制,即介绍创建target object的机制。

Spring AOP中的动态代理实现机制采用了两种方式,一种是默认使用的标准JDK提供的基于接口的动态代理机制,对于实现了接口的target object,都能够而且建议采用该机制动态创建。

但是,对于那些未实现任何接口的target object,Spring AOP只能采用另一种方式,即使用CGLIB的动态代理机制。但是采用CGLIB的动态代理,需要注意以下事项:

  • advice方法不能是final
  • Spring 3.2及以后版本,无需单独添加CGLIB类库,因为相关类库已经被包含在spring-core模块中
  • Spring 4.0及以后版本,被代理对象的构造函数不会再被调用2次了

强制AOP采用CGLIB动态代理的XML配置

<aop:config proxy-target-class="true">
    <!-- other beans defined here... -->
</aop:config>