首页 > 史丹利工具代理 > JDK静态代理、动态代理、CGLIB代理之实例

JDK静态代理、动态代理、CGLIB代理之实例

1、静态代理

a、定义个接口

JDK静态代理、动态代理、CGLIB代理之实例

b、实现类

JDK静态代理、动态代理、CGLIB代理之实例

c、添加一个静态代理类Proxy

JDK静态代理、动态代理、CGLIB代理之实例

d、测试实现

JDK静态代理、动态代理、CGLIB代理之实例

2、JDK动态代理

a、添加一个代理JDKProxy,该代理实现InvocationHandler接口且覆写invoke方法。

JDK静态代理、动态代理、CGLIB代理之实例

b、测试实现

JDK静态代理、动态代理、CGLIB代理之实例

3、Cglib动态代理

a、添加一个CglibProxy代理,同时实现MethodInterceptor接口。

JDK静态代理、动态代理、CGLIB代理之实例

b、测试实现

JDK静态代理、动态代理、CGLIB代理之实例

总结:

jdk静态代理类只能为一个被代理类服务,如果需要代理的类比较多,那么会产生过多的代理类。jdk静态代理在编译时产生class文件,运行时无需产生,可直接使用,效率好。

jdk动态代理必须实现接口,通过反射来动态代理方法,消耗系统性能。但是无需产生过多的代理类,避免了重复代码的产生,系统更加灵活。

cglib动态代理无需实现接口,通过生成子类字节码来实现,比反射快一点,没有性能问题。但是由于cglib会继承被代理类,需要重写被代理方法,所以被代理类不能是final类,被代理方法不能是final。

,可以参考MRO工业品采购的资料,