一、静态代理和动态代理对比:
1、静态代理书写要求:
1)被装饰者和装饰者需要实现同一接口或者实现同一个类。
2)装饰者要有被装饰者的引用。
3)需要加强的方法进行加强。
4)不需要加强的方法,执行原方法。
2、动态代理方法
在项目运行的时候,生成一个代理的对象,对方法进行增强。
2种方式:
1)jdk中方法proxy类,前提是实现接口。
2)spring中cglib,前提:继承类。
动态的在内存中创一个代理对象。
其中jdk中的实现:
static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
参数说明:
1)ClassLoader loader:是代理对象加载内存的类加载器。一般使用的是被代理对象的类加载器。
2)Class<?>[] interfaces:是代理对象需要实现的接口集合,一般是被代理对象的所实现接口的集合。、
3)InvocationHandler:执行处理类,在这里对需要加强的方法,进行加强。
InvocationHandler:Interface InvocationHandler。他是接口,我们可以通过匿名类来实现该接口。
方法:Object invoke(Object proxy, Method method, Object[] args)
参数说明:
proxy:代理对象。
Method:当前执行的方法。
Object[] args:当前执行的方法需要的参数。