AOP 代理

Spring AOP 默认使用标准的 JDK 动态代理来实现 AOP 代理。这使得任何接口(或一组接口)都可以被代理。

Spring AOP 也可以使用 CGLIB 代理。这对于代理类而不是接口是必需的。默认情况下,如果业务对象没有实现接口,则使用 CGLIB。由于面向接口编程而不是面向类编程是一种良好的实践,因此业务类通常实现一个或多个业务接口。在那些(希望是罕见的)情况下,如果你需要通知一个未在接口上声明的方法,或者你需要将一个代理对象作为具体类型传递给一个方法,那么 强制使用 CGLIB 是可能的。

理解 Spring AOP 是基于代理的这一事实非常重要。请参阅 理解 AOP 代理,以彻底了解此实现细节的实际含义。