谈谈你对 Spring AOP 的理解
AOP是面向切面编程,用于在不改变原有逻辑的基础上增加一些额外的功能,如事务管理、日志、缓存、权限控制等。
如果目标对象实现了接口,则默认使用JDK动态代理,可以强制指定使用Cglib。
如果目标对象没有实现接口,则使用Cglib静态代理。JDK动态代理通过反射来实现代理。在运行期会动态生成代理类,用后销毁。
Cglib静态代理通过生成被代理类的子类实现代理。这种方法限制了被代理类不能使用final来修饰。在编译期时生成代理子类的字节码。
强制Spring AOP使用Cglib进行代理
<!--启动AOP注解,false是使用默认的java代理,true是使用CGLIB代理-->
<aop:aspectj-autoproxy proxy-target-class="true"/>