AOP 代理
Spring AOP默认使用标准的JDK动态代理来创建AOP代理。这使得任何接口(或一组接口)都可以被代理。
Spring AOP也可以使用CGLIB代理。当需要代理类而不是接口时,这就变得必要了。默认情况下,如果一个业务对象没有实现任何接口,就会使用CGLIB。由于编程时遵循“面向接口”而非“面向类”的良好实践,业务类通常会实现一个或多个业务接口。在某些(希望很少见的)情况下,你可以强制使用CGLIB:比如当需要为未在接口中声明的方法添加AOP逻辑,或者需要将经过代理的对象以具体类型的形式传递给其他方法时。
重要的是要理解Spring AOP是基于代理的这一事实。有关这一实现细节的确切含义的详细说明,请参阅理解AOP代理。