JAVA动态代理模式(从现实生活角度理解代码原理)
所谓动态代理,即通过代理类:proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(runtime)实现动态关联。
java动态代理主要是使用java.lang.reflect包中的两个类。
invocationhandler类
public object invoke(object obj,method method,object[] obs)
其中第一个参数 obj 指的是代理类,method是被代理的方法,obs是指被代理的方法的参数组。此方法由代理类来实现。
proxy类
protectedproxy(invocationhandler h); staticclass getproxyclass(classloader loader,class[] interfaces); staticobject newproxyinstance(classloader loader,class[]interfaces,invocationhandlerh);
动态代理其实是在运行时生成class,所以,我们必须提供一组interface,然后告诉他class已经实现了这些interface,而且在生成proxy的时候,必须给他提供一个handler,让他来接管实际的工作。
同样的在开始代码实现之前,我们还是要讲一下关于链家的故事,之前静态代理模式中提到链家(接口)有卖二手房的业务,公司有一大批售房精英(静态代理),但现在互联网金融这块发展势头迅猛,链家也想插一脚进去,但苦于没有相关人才(代理)储备,这时公司便有了从相关的人才市场(动态代理“工厂”)寻找专业人才实现此类业务的想法,人才市场,顾名思义,就是根据企业(接口)的某种需求(被代理的方法)寻找有相关技能的人才。下面开始动态代理的实现代码:
第一步:lianjia提供房屋买卖以及互联网贷款渠道方法(接口)
interface lianjia { public void sellhouse(); public void loan(); }
第二步:我们的房主不仅要卖房也要贷款做其他事情(市场需求)得知链家有这个业务所以他又找到了链家(被代理对象)
public class housemaster implements lianjia { @override public void sellhouse() { system.out.println("我有房子要卖"); } @override public void loan() { system.out.println("我要贷款做生意"); } }
第三步:这里是浩瀚的人才市场,你想要的这里都有(生成动态代理的类)
import java.lang.reflect.invocationhandler; import java.lang.reflect.method; import java.lang.reflect.proxy; public class creatproxy implements invocationhandler{ //声明被代理对象(之所以用object是因为他在java中是所有类包含自定义类的超类) private object target; //创建代理对象(根据被代理对象需求) public object bind(object target){ this.target = target; //使用proxy类创建一个动态代理对象 object proxy = proxy.newproxyinstance(target.getclass().getclassloader(), target.getclass().getinterfaces(), this); return proxy; } //具体执行业务的方法 /** * proxy: 代理类对象 * method:被代理对象的方法 * args:被代理对象方法的参数 */ public object invoke(object proxy, method method, object[] args) throws throwable { //调用业务方法 method.invoke(target); return null; } }
第四步:实现测试类
public class test { public static void main(string[] args) { housemaster hm = new housemaster(); creatproxy cp = new creatproxy(); lianjia lj = (lianjia) cp.bind(hm); lj.sellhouse(); lj.loan(); } }
我们也发现从静态代理到动态代理整个过程中发现,被代理对象(市场需求)会随时变化,企业(接口)也必须启用动态代理模式才可应对市场变化(个人认为富士康就属于一个大的电子类动态代理工厂,而苹果谷歌等企业则为市场需求的缔造者与规则(接口)的)。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!