KKB : Spring AOP的代理模式:Jdk + Cglib

一、基于JDK实现的springAOP代理模式:针对于接口

UserDaoImpl的test1方法只简单的输出了UserDaoImpl,我们想的是在输出前后加上日志,希望记录上执行的日期操作人等等。

编写的Dai类即是想实现的目标效果,Dai继承于InvocationHandler,在invoke方法里包含了需要的日志功能

编写的测试类

上面的newProxyInstance()方法,从上面例子我们可以知道,根据一个对象可以得到类加载器(ClassLoader)和 接口

public static Object newProxyInstance(ClassLoader loader,
                                      @NotNull Class<?>[] interfaces,
                                      @NotNull reflect.InvocationHandler h)

二、基于cglib代理模式

1、添加cglib的依赖包

代理对象的编写

两种代理方式的区别:

1jdk动态代理生成的代理类和委托类实现了相同的接口

2cglib动态代理中生成的字节码更加复杂,生成的代理类是委托类的子类,且不能处理被final关键字修饰的方法;

3jdk采用反射机制调用委托类的方法,cglib采用类似索引的方式直接调用委托类方法;

猜你喜欢

转载自blog.csdn.net/awodwde/article/details/112796757