一.静态代理。
静态代理常用的如:三层架构。
缺点是不符合开闭原则。
二.动态代理
1.JDK动态代理 (实现InvocationHandler接口,实现invoke方法,被代理的类需要集成一个接口)
Proxy是一个工具类,实际上的作用就是动态生成字节码并编译执行新生成的类。
这里传入的clzz.getInterfaces() 就是为了获取到接口并且为新生成的类提供生成方法。
原理:动态生成字节码生成一个新的类,$Proxy类,$Proxy实现了被调用类的接口,通过反射,生成接口里所有的方法,调用目标方法其实就是在调用$Proxy这个新生成的类的方法,所以JDK动态代理一定要实现一个接口。
可以通过invoke()//代理,before()//代理前,after()//代理后 ,进行对代理方法的统一增强,有点类似Spring的AOP。
2.CGLib动态代理:
来源:https://blog.csdn.net/fox_233/article/details/99460291