Spring AOP 使用的动态代理,所谓的动态代理就是说 AOP 框架不会去修改字节码,而 是在内存中临时为方法生成一个 AOP 对象,这个 AOP 对象包含了目标对象的全部方法,并 且在特定的切点做了增强处理,并回调原对象的方法。
Spring AOP 中的动态代理主要有两种方式,JDK 动态代理和 CGLIB 动态代理。JDK 动 态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK 动态代 理的核心是 InvocationHandler 接口和 Proxy 类。如果目标类没有实现接口,那么 Spring AOP 会选择使用 CGLIB 来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB 是通过继承的方式做的动态代理,因此如果某个类被标记为 final,那么它是无法使用 CGLIB 做动态代理的。
AOP 在事务管理方面,Spring 使用 AOP 来完成声明式的事务管理有 annotation 和 xml 两种形式。开发中,方便代码编写,很多时候都是在 spring 配置文件中配置事务管理器并开 启事务控制注解。在业务类或业务类方法中添加@Transactional 实现事务控制。