一、代理模式
代理模式是常用的java设计模式,它的特征是代理类和委托类具有相同的接口,代理类负责给委托类预处理消息、过滤消息、传递消息和事后处理消息等。简单的说,就是访问实际对象的时候,通过代理对象来访问的,代理模式就是在访问实际对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。
二、静态代理
静态代理在编译期就已经将接口、代理类和被代理类确定下来了。并且一个代理类只能代理一个业务接口的实现类,如果有多个业务接口,需要多个代理类,若代理类对业务方法的预处理和调用后处理是一样的,则多个代理类就会有很多重复代码。
三、java动态代理
java动态代理能代理所有实现类的方法调用:根据传过来的业务实现类和方法名进行具体调用。并且动态代理可以对代理类的函数进行统一管理。
创建JDK动态代理对象的简单实现:
根据java.lang.reflect包下提供的Proxy类和InvocationHandler接口可以生成JDK动态代理类和动态代理对象。
1. //首先创建与代理对象关联InvocationHandler对象
2. //使用Proxy类的静态方法getProxyClass动态创建一个代理类
3. //使用反射获取代理类的带InvocationHandler类型参数的构造函数
4. //通过构造器创建一个实例对象(代理对象)
其中,InvocationHandler对象相当于一个中介类对象,代理对象在调用自己方法的时候,会根据自己持有的中介类对象调用中介类对象的invoke方法,中介类对象又根据自己持有的被代理对象来调用被代理对象的方法,从而达到代理
执行被代理对象的方法。也就是说,动态代理就是通过中介类实现了具体的代理功能。