从java 反射看延迟加载(代理模式)(七)——jdkproxy实现原理
2016-11-28 16:04
495 查看
这篇博客还没有完成…… 我上篇博客你可以看到,虽然只是个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; }
//compile JavaCompiler 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 instance URL[] 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();
相关文章推荐
- 利用Java的反射与代理实现IOC模式
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 反射实现 AOP 动态代理模式(Spring AOP实现原理)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- [转贴] 反射实现 AOP 动态代理模式(Spring AOP 的实现原理)
- java反射机制(三)---java的反射和代理实现IOC模式 模拟spring
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 利用Java的反射与代理实现IOC模式
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 反射实现AOP 动态代理模式(Spring AOP 的实现原理)
- 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- 从java语言看 代理模式和反射原理
- 反射实现AOP动态代理模式(Spring AOP实现原理)