动态代理技术就是用来产生一个对象的代理对象的
代理对象存在的价值主要用于拦截对真实业务对象的访问。
代理对象应该具有和目标对象(真实业务对象)相同的方法
首先创建两个接口Email和Data,Email中有两个方法send()和receive()待实现,Data中有read()和write()待实现
如下图
分别创建他们各自的实现类FlashEmail 和UsbData
代码如下:
创建两个annotation Aspact和plus如下图
Aspact用来标识附加的类
被标识的类如下图
以下代码创建代理对象
该类实现了InvocationHandler接口
Interface InvocationHandler
该接口中仅定义了一个方法:public Object invoke(Object obj, Method method, Object[] args),在使用时,第一个参数obj一般是指代理类,method是被代理的方法,args为该方法的参数数组。这个抽象方法在代理类中动态实现
。
以下为invoke方法
分为两部分
创建原对象
根据原始对象,创建代理对象代码如下:
测试结果:
这是发现了send()方法和write()方法都附加了加密方法,即成功创建了代理对象