AOP 代理

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

Spring AOP 也可以使用 CGLIB 代理。这对于代理类而不是接口是必要的。默认情况下,如果业务对象没有实现接口,则会使用 CGLIB。由于最好的做法是针对接口而不是类进行编程,业务类通常实现一个或多个业务接口。在那些(希望很少见的)需要通知未在接口上声明方法或需要将代理对象作为具体类型传递给方法的情况下,可以强制使用 CGLIB

重要的是要理解 Spring AOP 是基于代理的。请参阅理解 AOP 代理,详细了解这个实现细节实际上意味着什么。