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-20 21:43:15 发布
Spring中的AopProxy接口有两种实现:JdkDynamicAopProxy和Cglib2AopProxy。接口代理使用JDK动态代理,类代理或优化代理则采用Cglib。引介增强必须用Cglib,因为它涉及类级别的修改。了解更多详情可参考相关博客链接。
摘要由CSDN通过智能技术生成