1、静态代理
a、定义个接口
b、实现类
c、添加一个静态代理类Proxy
d、测试实现
2、JDK动态代理
a、添加一个代理JDKProxy,该代理实现InvocationHandler接口且覆写invoke方法。
b、测试实现
3、Cglib动态代理
a、添加一个CglibProxy代理,同时实现MethodInterceptor接口。
b、测试实现
总结:
jdk静态代理类只能为一个被代理类服务,如果需要代理的类比较多,那么会产生过多的代理类。jdk静态代理在编译时产生class文件,运行时无需产生,可直接使用,效率好。
jdk动态代理必须实现接口,通过反射来动态代理方法,消耗系统性能。但是无需产生过多的代理类,避免了重复代码的产生,系统更加灵活。
cglib动态代理无需实现接口,通过生成子类字节码来实现,比反射快一点,没有性能问题。但是由于cglib会继承被代理类,需要重写被代理方法,所以被代理类不能是final类,被代理方法不能是final。