JAVA动态代理模式(从现实生活角度理解代码原理)
来源:互联网 发布:美丽说和淘宝的关系 编辑:程序博客网 时间:2024/06/01 08:18
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 {@Overridepublic void sellHouse() {System.out.println("我有房子要卖");}@Overridepublic 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();}}
我们也发现从静态代理到动态代理整个过程中发现,被代理对象(市场需求)会随时变化,企业(接口)也必须启用动态代理模式才可应对市场变化(个人认为富士康就属于一个大的电子类动态代理工厂,而苹果谷歌等企业则为市场需求的缔造者与规则(接口)的)。
- JAVA动态代理模式(从现实生活角度理解代码原理)
- JAVA适配器模式(从现实生活角度理解代码原理)
- JAVA静态代理模式(从现实生活角度理解代码原理)
- JAVA简单工厂模式(从现实生活角度理解代码原理)
- JAVA装饰者模式(从现实生活角度理解代码原理)
- JAVA模板方法设计模式(从现实生活角度理解代码原理)
- 源码角度理解JDK动态代理的实现原理
- 从原理出发理解JDK动态代理
- 从代理模式到Java动态代理
- 从动态代理模式看Retrofit原理
- 从类比现实生活的角度看待编码
- Java动态代理模式理解和实现
- 设计模式之动态代理的代码实现(Java)
- 【动态代理】从源码实现角度剖析JDK动态代理
- 对代理模式与Java动态代理类的理解
- 对代理模式与Java动态代理类的理解
- 对代理模式与Java动态代理类的理解
- 对代理模式与Java动态代理类的理解
- 欢迎使用CSDN-markdown编辑器
- window对象
- JVM字节码执行引擎
- #早安,努力#11.24
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.1 使用GLSurfaceView和MediaPlayer播放一个平面视频(上)
- JAVA动态代理模式(从现实生活角度理解代码原理)
- 第8篇 WebRTC一对一IOS端研究(一)
- history对象和location对象
- Java之构造函数
- screen对象和Event对象
- DNS领域服务器搭建
- Hadoop学习笔记(三)——HDFS应用程序开发
- C语言指针——一个小问题
- bootstrap table 实例