Java代理。
java代理:在不用修改源码的情况下,可以在实现类方法的前后做些额外的处理。
1)、静态代理。
在程序运行前,代理类的.class文件已存在。事先知道要代理的实现类是什么。
优点:不需要知道委托类(实现类),只需知道代理类即可。
缺点:(1)代码重复。代理类和委托类(实现类)实现了相同的接口。
(2)维护复杂。接口增加一个方法,所有的代理类和委托类(实现类)都需要实现此方法,而且代理类和委托类(实现类)的关系为一对一,无法一对多。
2)、动态代理。
在程序运行时,通过反射机制动态生成代理类。事先不知道要代理的实现类是什么。
优点:(1)能代理该接口的所有实现类。
(2)接口中的所有方法都在InvocationHandler.invoke方法中统一处理,不像静态代理那样每个都进行处理。
缺点:Java动态代理只能代理接口,要代理类需要使用如cglib第三方的类库。