读JDK动态代理(源码)有感
2016-10-10 19:11
134 查看
读JDK动态代理(源码)有感
先举个生活场景帮主大家消化一下:假定我有一家 SUN公司的小型无人机,飞机有2个 操作 (起飞,下降)。由于由于飞机起飞的时候逼格不够,我希望飞机起飞的时候能放首歌《最炫民族风》。而我只是个月薪3000千的洗剪吹,不会改造这个高科技。那么我交给了一个想赚外快的大学毕业生(物联网工程专业的)。然后他要我提供三样东西:
飞机设计图
飞机实物
我那个带有《最炫名族风.avi》小米MP3智能播放器。
我的《需求文档》。
我把4分资料给了他,他就开始给我改造了。
过几天我便拿到了我要的《真·装逼无人机第二代》
然后我们可以把JDK的各个类对号入座了:
classLoader 对应【飞机设计图】
构造InvocationHandler的target成员,也就是被代理对象 对应【飞机实物】
代理逻辑(写在invoke()方法里面的拦截逻辑) 对应【带有《最炫名族风.avi》小米MP3智能播放器。】
InvocationHandler的invoke方法 对应【《需求文档》】
赚外快的大学生相当于Proxy.newProxyInstance()方法
《真·装逼无人机第二代》 相当于 实现target.getClass().getInterfaces()的Proxy实例对象
JDK动态代理流程
用户编辑invoke(),写入代理业务逻辑。然后将【InvocationHandler,classLoader,还有被代理的接口数组】传入Proxy.newProxyInstance(),Proxy.newProxyInstance()中的【代理生成器】构造代理对象。
【代理生成器】具体构造步骤
通过target获取类名和接口名。之后通过class.forName(classNameStr).getMethod(methodNameStr)获取【被代理对象的原方法实现】.
然后在实现【代理方法 (代理对象) 】的时候调用invoke(sourceMethod),并把原方法实现传入invoke(sourceMethod)。
最终完整了proxy构造由InvocationHandler.getProxy()返回。
相关文章推荐
- 读JDK动态代理源码(Proxy类)
- JDK动态代理和CGLIB动态代理+源码下载
- jdk 动态代理源码分析
- jdk动态代理源码剖析
- 浅析Spring AOP源码(十三) jdk的动态代理和cglib的代理
- java动态代理Proxy源码解析(Jdk 1.6)
- JDK动态代理(源码解析)
- JDK动态代理源码解析
- 【引用】读JDK动态代理源码(Proxy类)
- 深入剖析JDK动态代理源码实现
- 动态代理及JDK动态代理源码分析
- JDK动态代理源码Proxy
- 转 MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析
- Java动态代理详解,以及底层JDK源码实现分析(基于Java8)。
- 读JDK动态代理源码(Proxy类)
- 基于jdk动态代理的实现与源码解析
- MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析
- 浅析JDK动态代理的源码
- JDK动态代理和CGLIB动态代理+源码下载
- Java--JDK动态代理核心源码解析