一、基于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的依赖包
代理对象的编写
两种代理方式的区别:
1、jdk动态代理生成的代理类和委托类实现了相同的接口;
2、cglib动态代理中生成的字节码更加复杂,生成的代理类是委托类的子类,且不能处理被final关键字修饰的方法;
3、jdk采用反射机制调用委托类的方法,cglib采用类似索引的方式直接调用委托类方法;