Java中的静态代理和动态代理
? ? ? 我叫蒙林,在北京租了一间房子。昨天我有事去了广东,当我到了广东后,房东王小三打电话给我说今天该交房租了(合同上写的是今天交房租,且过期不交房租将产生滞纳金),那么我怎么办呢? 于是我打电话给北京的朋友黄河,让他先替我把房租交给房东,那么黄河是以我的名义交的房租。
? ? ? 那么在这一事件中,黄河就是我蒙林的代理(英文为Proxy),当我不方便办理某一件事情的时候,代理可以替我完成。黄河(我的代理)和我都有交房租的这一能力。
?
二、Java中的代理? ? ? 从面向对象的角度来说,蒙林和黄河各为一个类,他们都有一个交房租的功能,因此我可以让他们都实现同一接口,接口中定义二者的共同功能。
涉及到的类有:MengLin.java ?——蒙林
HuangHe_Proxy.java ?——黄河
Function.java ?—— 功能类(定义二者共同的方法)
Test.java —— 测试类
?
?
?
package com.biocjm;import com.biocjm.DynamicProxyUtil.Interceptor;public class Test {public static void main(String[] args) {dproxy();}// 动态代理工具类测试public static void dproxy() {Interceptor interceptor = new Interceptor() {@Overridepublic void doBefore() {System.out.println("before method.");}@Overridepublic void doAfter() {System.out.println("after method. ");}};DynamicProxyUtil dynamicProxyUtil = new DynamicProxyUtil(interceptor);dynamicProxyUtil.setInterceptor(interceptor);Object dyProxy = dynamicProxyUtil.getProxy();// 切记,动态代理是基于借口编程的, 因此被代理类一定要实现至少一个接口,否则在类型转换时将出现异常Interceptor interceptor2 = (Interceptor) dyProxy;interceptor2.doAfter();}}?
?
?
?
?
?
?
?
?
?