Spring AOP 代理总结:静态代理和动态代理
参考:https://mp.weixin.qq.com/s/dLOn23waK4gv-Rp9dC0Kfg
0、作用
***将业务逻辑和系统处理的代码(关闭连接、事务管理、操作日志记录)解耦。***
1、静态代理
自己手动创建Proxy
类,并将RealSubject
类注入。
2、动态代理 - JDK、Cglib
运行时增强:动态代理就是说AOP框架不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。
动态代理主要包含:
JDK动态代理:利用反射接收被代理的类,从而生成代理类Proxy类。被代理的类必须实现一个接口
Cglib动态代理:生成被代理类的子类作为代理类。(所以==被代理类不能被
final
修饰==)spring aop会根据被代理类是否实现了某个接口来自动选择动态代理方式
1)JDK动态代理
必须实现一个接口(必须有接口和实现类)
目标类接口:
package a_proxy.a_jdk;
public interface UserService {
public void addUser();
public void updateUser();
public void deleteUser();
}
实现类:
package a_proxy.a_jdk;
public class UserServiceImpl implements UserService {
@Override
public void addUser() {
System.out.println("a_proxy.a_jdk addUser()");
}
@Override
public void updateUser() {
System.out.println("a_proxy.a_jdk updateUser()");
}
@Override
public void