AOP的实现原理: 都是基于代理模式,都是生成一个大代理对象
静态AOP: AspectJ实现的AOP, 将切面代码直接编译到Java类文件中 --- 实现: JDK提供的动态代理技术
动态AOP: 将切面代码进行动态织入实现的AOP --- Spring的AOP为动态AOP --- 实现: CGLIB(动态字节码增强技术)
JDK动态代理: --- InvocationHandler 和 Proxy.newProxyInstance() --- 动态代理的基本原理为反射 + 多态 + 聚合
InvocationHandler是一个接口,通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编制在一起。
Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象
JDK动态代理要求被代理者实现一个接口,只有接口中的方法才能被代理, 其方法是,将被代理对象注入到一个中间对象,而中间对象实现InvocationHandler接口,
在实现该接口时,可以在被代理对象调用它的方法时,在调用前后插入一些代码,
Proxy.newProxyInstance()能够利用中间对象来生产代理对象,插入的代码就是切面代码
局限:
被代理的对象必须实现接口,而且只有接口中的方法才能被代理
--- 实例:com.jay.advanced.java.动态代理.demo1
eg:
public class MyProxyInvocationHandler implements InvocationHandler {
private Object target; // 被代理的对象
public MyProxyInvocationHandler(Object target) {
this.target = target;
}
public Object getTarget() {
return target;
}
public void setTarget(Object target) {
this.target = target;
}
/*
Spring中AOP实现的两种方式之JDK和cglib的动态代理
最新推荐文章于 2024-07-17 18:05:25 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)