从java 反射看延迟加载(代理模式)
文章平均质量分 86
系列博客已经连接到第七篇了,我想连载起来。
谭倩倩
这个作者很懒,什么都没留下…
展开
-
五分钟理解Java的反射API
反射APIJava是一种具有反射功能的语言。允许开发人员在运行时检查类型、方法、字段、注解等,并在程序运行时决定是否使用。 为此,Java的反射API提供类,类,字段,构造函数,方法,注释和其他。 使用它们可以与编译时未知的类型进行交互,例如创建未知类的实例并对它们调用方法。这个快速提示旨在让您深度了解什么是反射,它在Java中的使用,以及它可以用于什么。 之后,你将准备好开始转载 2017-05-17 00:01:38 · 761 阅读 · 6 评论 -
从java 反射看延迟加载(代理模式)(一)
什么都不说了,先上关于java反射的栗子……【案例1】通过一个对象获得完整的包名和类名package Reflect; /** * 通过一个对象获得完整的包名和类名 * */class Demo{ //other codes...} class hello{ public static void main(String[] args) {原创 2016-10-30 11:26:34 · 2538 阅读 · 33 评论 -
从java 反射看延迟加载(代理模式)(二)
代理模式代理模式使用代理对象完成用户请求,屏蔽用户对真实对象的访问。现实世界的代理人被授权执行当事人的一些事宜,无需当事人出面,从第三方的角度看,似乎当事人并不存在,因为他只和代理人通信。而事实上代理人是要有当事人的授权,并且在核心问题上还需要请示当事人。在软件设计中,使用代理模式的意图也很多,比如因为安全原因需要屏蔽客户端直接访问真实对象,或者在远程调用中需要使用代理类处理远程方原创 2016-10-30 11:41:35 · 2629 阅读 · 39 评论 -
从java 反射看延迟加载(代理模式)(三)深入理解java反射
深入理解java---反射篇点击打开链接 背景 在Java中如果我们预先不知道一个对象的确切类型,RTTI可以告诉你,但是有一个限制,那就是在编译的时候这个对象类型必须是确定的(需要有一个确定的编译类型),这样我们才能使用RTTI去识别它,并且利用这些信息做一些有用的事,事实上在编译的时候你的程序压根儿是不知道某个对象是属于哪一个类的,比如在编译的时候,你可以从你的本机原创 2016-10-30 20:01:15 · 1529 阅读 · 22 评论 -
从java 反射看延迟加载(代理模式)(四)——反射是否真的会让你的程序性能降低?
本来我觉得这个话题没有什么好讨论的了,网上已经有太多太多的文章在说这个问题,有疑问的大可以到网上找相关的文章来查阅。但是,我想起来我刚编程的时候,也是遇到这种困惑到网上一查找,从各种角度阐述的都有,本质基本都说出来了,但是还是有很多人不理解,我这里就从我的角度再说一遍。早两天写了《从把三千行代码重构成15行代码谈起》这篇文章,看到评论中有一些同学的回复还是在质疑反射的性能,好像程序原创 2016-10-31 16:35:23 · 1841 阅读 · 16 评论 -
从java 反射看延迟加载(代理模式)(五)——理解Proxy、InvocationHandler
以下的内容部分参考了网络上的内容,在此对原作者表示感谢! Java中动态代理的实现,关键就是这两个东西:Proxy、InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的。 首先,invoke方法的完整形式如下: Java代码 publ原创 2016-11-04 09:03:51 · 1466 阅读 · 21 评论 -
从java 反射看延迟加载(代理模式)(六)——动态代理与静态代理
一、先看看代理模式的uml图图讲的很清楚了,我的例子的subject是moveable类里面有move方法,realsubject是tank,proxysubject是timeTankProxy而已。二、我个人认为:静态代理就像是下图那样,你要取名字,建好类名,比如timeTankProxy。 静态代理的代码怎么实现的呢?pa原创 2016-11-28 15:59:22 · 1949 阅读 · 31 评论 -
从java 反射看延迟加载(代理模式)(七)——jdkproxy实现原理
这篇博客还没有完成……动态代理底层代码——文件写入实现class的创建静态代码是通过new来实例化的,我们假设,newProxyInstance这个方法能够帮我们实例化对象。Proxy里面的代码如下:package zhangsisi;import java.io.File;import java.io.FileWriter;import java.io.IOEx原创 2016-11-28 16:04:33 · 1347 阅读 · 42 评论 -
了解JAVA classloader
与C或C++编写的程序不同,Java程序并不是一个可执行文件,而是由许 多独立的类文件组成,每一个文件对应于一个Java类。ClassLoader是JVM中将类装入内存的那部分。而且,Java ClassLoader就是用Java语言编写的。这意味着创建您自己的ClassLoader非常容易,不必了解JVM的微小细节。与C或C++编写的程序不同,Java程序并不是一个可执行文件,而是由许多独立原创 2016-12-31 09:38:46 · 1285 阅读 · 13 评论 -
JavaCompiler --JDK6 API的简介
在非常多Java应用中需要在程式中调用Java编译器来编译和运行。但在早期的版本中(Java SE5及以前版本)中只能通过tools.jar中的com.sun.tools.javac包来调用Java编译器,但由于tools.jar不是标准的Java库,在使用时必须要设置这个jar的路径。而在Java SE6中为我们提供了标准的包来操作Java编译器,这就是javax.tools包。使用这个包,我们原创 2016-12-31 09:29:55 · 1606 阅读 · 11 评论