大型网站系统与JAVA中间件实践——chapter1-4之代理

静态代理与动态代理

对于静态代理,代理类与委托类具有同样的接口,会为每个被代理的对象构造对应的代理类,实现类作为代理类构造方法的入参传入,可以在实现类实现方法的前后进行pre和post等处理,比如记录日志和监控等等。
缺点:对每个具体类都完成一个代理类,然后重复写很多类似的代码。
动态代理只为一类代理行为写一个具体的实现类即可。
public static Object newProxyInstance(ClassLoader loader,
                                          Class<?>[] interfaces,
                                          InvocationHandler h)
用工厂方法为某一类代理行为生成代理,借助InvocationHandler。
public interface InvocationHandler {
public Object invoke(Object proxy, Method method, Object[] args)
        throws Throwable;
}
注意,生成的代理是Proxy的继承类,具体是如何调用invoke方法的,可以参考博客

猜你喜欢

转载自blog.csdn.net/xxcupid/article/details/53169266