Spring AOP 默认使用标准的 JDK 动态代理进行 AOP 代理。这使得任何接口(或一组接口)都可以被代理。
Spring AOP 也可以使用 CGLIB 代理。这对于 代理类 而不是接口来说是必要的。默认情况下,如果一个业务对象没有实现一个接口,就会使用CGLIB 。由于对接口而不是类进行编程是很好的做法,业务类通常实现一个或多个业务接口。在那些(希望是罕见的)需要向未在接口上声明的方法提供建议的情况下,或者需要将代理对象作为具体类型传递给方法的情况下,可以强制使用 CGLIB。
掌握 Spring AOP 是基于代理的事实是很重要的。请参阅 “理解AOP代理“,以深入研究这一实现细节的实际含义。