Spring AOP 默认使用标准JDK动态代理来实现AOP代理。这个使得任何接口都能被代理。
Spring AOP 也可以使用CGLIB代理。这个在对类进行代理的时候是必须的。默认,CGLIB 会在一个业务对象没有实现接口的时候使用。因为基于接口编程会比基于类编程好,业务类经常会实现一个或者多个业务接口。在那种你需要对未实现接口的方法进行建议的时候,或者你需要传递被代理的对象到一个方法作为一个具体的类型的时候,强制使用CGLIB成为可能。
认识到Spring AOP 是 基于代理的是很重要的事情。