Skip to content

Latest commit

 

History

History
29 lines (18 loc) · 1.58 KB

4-动态代理.md

File metadata and controls

29 lines (18 loc) · 1.58 KB

动态代理

动态代理经常用于装饰器、适配器设计模式中。 动态代理提供了一种替代方法,实现许多常见的设计模式如Facade门面模式、Bridge桥接模式、Interceptor解释器模式、Decorator装饰器模式、Proxy代理模式和Adapter适配器模式的动态实现。 尽管这些设计模式使用普通的类也能简单的实现,但是在大都数情况下,使用动态代理方式更加方便、更紧凑,可以消除许多手写的或生成的代码。

JDK动态代理接口

JDK动态代理是基于接口实现的(后文解释),需要实现java.lang.reflect.InvocationHandler这个接口:

public interface InvocationHandler {
	public Object invoke(Object proxy, Method method, Object[] args)
        throws Throwable;
}

参考: org.byron4j.cookbook.javacore.dynamicproxy.jdkproxy.JDKDynamicProxy

动态代理总结

  • JDK动态代理: 利用反射原理,动态的生成代理类,将类的载入延迟到程序执行之中,解耦了代理类和被代理类的联系.主要要实现InvationHandler接口.

  • CGLIB动态代理:原理是继承,把被代理类作为父类,动态生成被代理类的子类,三个步骤,设置父类,设置回调函数,创建子类.实现MethodInterceptor 接口,拦截调用父类方法时,会处理回调方法,处理自己的增强方法.

参考资料: