一种是JDK原生态的 ,一种是要引入cglib包的
第一种 jdk的
1Proxy类来产生动态代理对象
2还有一个要实现了 InvocationHander接口的类里面有真正的目标对象,通过反射invoke方法来调用真正要调用的方法。在方法调用之前之后或者异常时候 写增强的代码逻辑。
第二种 cglib的 要导入cglib jar包
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.5</version>
</dependency>
1 Enhancer类 通过create方法来产生动态代理
2实现了MethodInterceptor接口的类 里面通过proxy.invokeSuper调用真正的方法,同样可以在方法调用之前之后或者异常时候 写增强的代码逻辑。
其实两种方式的思想都是一样的,很类似,可以比较记忆。
总结
jdk的是自带的 不用导入其它jar,要基于接口。
cglib需要导入 cglib包 通过继承的方式通过代理有没有接口实现都可以,无法处理final的方法 以为final方法子类不能改写。
附上代码,测试类入库 Client。