从java 反射看延迟加载(代理模式)(七)——jdkproxy实现原理
来源:互联网 发布:黑客网站攻击软件 编辑:程序博客网 时间:2024/05/16 16:11
这篇博客还没有完成……
我上篇博客你可以看到,虽然只是个move的方法,但是move的时候我还希望它把执行时间返回来怎么办,拓展来说,我还希望它能打印日志怎么办?这些事情每次都要重复做,降低了好多效率。所以,你通过代理,代理类里面写了执行时间的代码,这样子你写tank类的时候,专心写你的move方法就好了。
动态代理底层代码——文件写入实现class的创建
静态代码是通过new来实例化的,我们假设,newProxyInstance这个方法能够帮我们实例化对象。
Proxy里面的代码如下:
package zhangsisi;import java.io.File;import java.io.FileWriter;import java.io.IOException;public class Proxy { public static Object newProxyInstance() throws Exception{ String rn="\r\n"; String src=""+ " package zhangsisi;"+ rn+ "public class tankcreate implements Moveable{"+ rn+ "private Moveable tank;"+ rn+ "public tankcreate(Moveable tank) {"+ rn+ "super();"+ rn+ "this.tank = tank;"+ rn+ "}"+ rn+ "@Override"+ rn+ "public void move() {"+ rn+ "System.out.println(\"这是timeTankProxy做的时间分割开始\");"+ rn+ "tank.move();"+ rn+ "System.out.println(\"这是timeTankProsy做的时间分割结束\");"+ rn+ "}"+ rn+ "}"; String filename=System.getProperty("user.dir") + "/src/zhangsisi/tankcreate.java"; File f=new File(filename); FileWriter fw;fw = new FileWriter(f);fw.write(src);fw.flush(); fw.close(); return null; }
//compileJavaCompiler compiler = ToolProvider.getSystemJavaCompiler();StandardJavaFileManager fileMgr = compiler.getStandardFileManager(null, null, null);Iterable units = fileMgr.getJavaFileObjects(fileName);CompilationTask t = compiler.getTask(null, fileMgr, null, null, null, units);t.call();fileMgr.close();
//load into memory and create an instanceURL[] urls = new URL[] {new URL("file:/" + System.getProperty("user.dir") +"/src")};URLClassLoader ul = new URLClassLoader(urls);Class c = ul.loadClass("com.bjsxt.proxy.TankTimeProxy");System.out.println(c);Constructor ctr = c.getConstructor(Moveable.class);Moveable m = (Moveable)ctr.newInstance(new Tank());m.move();
0 0
- 从java 反射看延迟加载(代理模式)(七)——jdkproxy实现原理
- 从java 反射看延迟加载(代理模式)(五)——理解Proxy、InvocationHandler
- 从java 反射看延迟加载(代理模式)(六)——动态代理与静态代理
- 从java 反射看延迟加载(代理模式)(三)深入理解java反射
- 从java 反射看延迟加载(代理模式)(一)
- 从java 反射看延迟加载(代理模式)(二)
- 从java 反射看延迟加载(代理模式)(四)——反射是否真的会让你的程序性能降低?
- 从java语言看 代理模式和反射原理
- 深入浅出Spring(一) 代理模式(静态代理,jdkproxy,cglib)
- Java基础(十一) 代理: jdkProxy和cgLib
- Java 例子 反射实现 AOP 动态代理模式(Spring Aop实现原理)
- JAVA代理模式与延迟加载
- lazyload实现原理(图片延迟加载)
- 从动态代理模式看Retrofit原理
- Java设计模式——代理模式实现及原理(基于java8)
- Java深度历险(七)——Java反射与动态代理
- Java深度历险(七)——Java反射与动态代理
- java设计模式(七)---代理模式
- Retrofit 2.0框架使用。
- 学习笔记之JavaSE(40)--IO流2
- Linux 默认软件源切换
- FTP使用
- value toDF is not a member of org.apache.spark.rdd.RDD[People]
- 从java 反射看延迟加载(代理模式)(七)——jdkproxy实现原理
- POJ2376——Cleaning Shifts(贪心)
- 灰度测试,灰度发布
- 【hrbust】2298 Diamond 【数学+暴力】
- 问答与思考--迷茫?
- 数据结构——二叉树
- 实现下拉列表,点击其他位置自动隐藏效果的三种方式比较
- 怎样制作FL Studio步进音序器中的节奏
- 物联卡