java_IO,反射机制,jdk动态代理

来源:互联网 发布:湖人王朝时期科比数据 编辑:程序博客网 时间:2024/06/06 03:23

1.IO

字节流和字符流。装饰者模式构建多种流。

关闭流时只需要关闭最外层的流。字节流和字符流之间的转换: InputStreamReader需要和InputStream套接;OutputStreamWriter需要和OutputStream套接。

2.反射机制

java的反射机制允许程序在运行时加载、探知、使用编译期间完全未知的class。可以实现动态创建对象和编译即运行时确定类型,绑定对象。在jdk的动态代理中有具体使用。

3.JDK的动态代理

jdk的动态代理模式,动态代理是指在运行时,动态生成代理类。代理类的字节码将在运行时生成并载入当前的ClassLoader。JDK动态代理不能对类进行代理,只能对接口进行代理。代理类和实现类实现相同接口。spring中使用到了jdk的动态代理。

步骤:

1)通过实现InvocationHandler接口创建自己的调用处理器

2)通过为Proxy类指定ClassLoader对象和一组interface来创建动态代理类

3)通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型

4)通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入

 

 //InvocationHandlerImpl 实现了InvocationHandler接口,并能实现方法调用从代理类到委托类的分派转发 

//其内部通常包含指向委托类实例的引用,用于真正执行分派转发过来的方法调用 

InvocationHandler handler = newInvocationHandlerImpl(..); 

 

//通过Proxy为包括Interface接口在内的一组接口动态创建代理类的对象 

Class class = Proxy.getProxyClass(classLoader,newClass[]{Interface.class,...}); 

 

//通过反射从生成的类对象获得构造函数对象 

Constructor constructor = class.getConstructor(newClass[]{InvocationHandler.class}); 

 

//通过构造函数对象创建动态代理类实例 

Interface Proxy = (Interface)constructor.newInstance(newObject[]{handler}); 

 

//Proxy类的静态方法newProxyInstance对上面具体步骤的后三步做了封装,简化了动态代理对象的获取过程。 

//InvocationHandlerImpl实现了InvocaitonHandler接口,并能实现方法调用从代理类到委托类的分派转发 

InvocaitonHandler handler = newInvocationHandlerImpl(..); 

//通过Proxy直接创建动态代理类实例 

 

Interface proxy = (Interface)Proxy.newProxyInstance(classLoader,newClass[]{Interface.class},handler);


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胃窦炎胆汁反流怎么办 怀孕总胆汁酸高怎么办 胃里胆汁反流怎么办 苦胆水吐出来了怎么办 喝多了吐胆汁怎么办 吐出黄水苦水是怎么办 喝酒喝的一直吐怎么办 孕期总胆汁酸高怎么办 孕早期胆汁酸高怎么办 孕妇总胆汁酸高怎么办 宝宝一天吐了6次怎么办 肛周脓肿破了怎么办 肛周脓肿发烧了怎么办 肛周脓肿便血该怎么办 婴儿得肛周脓肿怎么办 水痘长在龟头上怎么办 轻度萎缩性胃炎伴肠化怎么办 肺癌晚期腿肿了怎么办 胸骨剑突按压痛怎么办 22岁有白头发怎么办 血热导致掉头发怎么办 36岁脱发严重该怎么办 血热引起的脱发怎么办 头发掉的好厉害怎么办 胃热导致的口臭怎么办 肝火和胃火旺盛怎么办 2月宝宝舌苔厚白怎么办 小孩舌头咬破了怎么办 两岁宝宝不说话怎么办 4岁半说话不清楚怎么办 10小孩说话不清怎么办 2岁宝宝说话结巴怎么办 4岁宝宝说话结巴怎么办 3岁幼儿说话结巴怎么办 三岁宝宝说话结巴怎么办 6岁宝宝说话结巴怎么办 经前下巴长痘怎么办 胃火导致的口臭怎么办 脸上有热毒痘痘怎么办 被丙肝患者针扎怎么办 大脑供血不足该怎么办