java路径,如何使用反射,加载指定路径下的java路径文件,读取其内部属性信息

path 不以'/'开头时默认是从此类所在的包下取资源以'/'开头则是从ClassPath(Src根目录)根下获取。

在开发过程中经常会遇到java路径对潒的属性特征不确定的情况比如属性的名称,属性的类型属性的取值等不确定的情况,如何在java路径运行时获取这些信息动态的设置java蕗径对象的属性值?借助java路径反射机制以及java路径ssist能够轻松解决这些问题这篇文章旨在抛砖引玉,不足之处请多多指正

简单介绍java路径的反射原理

java路径的反射机制是java路径特性之一,反射机制是构建框架技术的基础所在java路径程序要能够运行,java路径虚擬机需要事先加载java路径类目前我们的程序在编译期就已经确定哪些java路径类需要被加载。

java路径的反射机制是在编译时并不确定哪个类需要被加载而是在程序运行时才加载、探知、自审。这样的特点就是反射

何为自审:通过java路径的反射机制能够探知到java路径类的基本结构,這种对java路径类结构探知的能力我们称为java路径类的“自审”。

java路径的反射原理最典型的应用就是各种java路径 IDE:比如Jcreatoreclipse,idea等当我们构建出一个對象时,去调用该对象的方法和属性的时候一按点,IDE工具就会自动的把该对象能够使用的所有的方法和属性全部都列出来供我们进行選择。这就是利用了java路径反射的原理是对我们创建对象的探知、自审的过程。

Class类:要正确使用java路径反射机制就得使用java路径.lang.Class这个類它是java路径反射机制的起源。当一个类被加载以后java路径虚拟机就会自动产生一个Class对象。通过这个Class对象我们就能获得加载到虚拟机当中這个Class对象对应的方法、成员以及构造方法的声明和定义等信息

  1. 获取类的Class对象

  2. 如果类名在编译期不知道, 但是在运行期可以获得, 你可以使用丅面的方法Class c = Class.forName(“类的全路径”);
  3. 利用java路径反射机制我们可以很灵活的对已经加载到java路径虚拟机当中的类信息进行检测。当然这种检测在对运行嘚性能上会有些减弱所以什么时候使用反射,就要靠业务的需求、大小以及经验的积累来决定。

java路径ssist是一个开源的分析、编辑和创建java路径字节码的类库

关于java路径字节码的处理,目前有很多工具如bcel,asm不过这些都需要直接跟虚拟机指令打交道。如果你不想了解虚拟机指令可以采用java路径ssist。java路径ssist是jboss的一个子项目其主要的优点,在于简单而且快速。直接使用java路径编码的形式而不需要了解虚拟机指令,就能动态改变类的结构或者动态生成类。简而言之:java路径ssist 能够转换现有类的基本内容或创建一个新类。

java路径ssist 可以检查、编辑以及创建 java路径 二进制类检查方面基本上与通过 Reflection API 直接在 java路径 中进行的一样。java路径ssist 使用类池 java路径ssist.ClassPool 类跟踪和控制所操作的类其工作方式与 JVM 类装载器非常相似,但是有一个重要的区别是它不是将装载的、要执行的类作为应用程序的一部分链接类池使所装载的类可以通过 java蕗径ssist API 作为数据使用。可以使用默认的类池它是从 JVM 搜索路径中装载的,也可以定义一个搜索自定义路径列表的类池甚至可以直接从字节數组或者流中装载二进制类,以及从头开始创建新类

装载到类池中的类由 java路径ssist.CtClass 实例表示。与标准的 java路径 java路径.lang.Class 类一样 CtClass 提供了检查类数据(如字段和方法)的方法。不过这只是 CtClass 的部分内容,它还定义了在类中添加新字段、方法和构造函数、以及改变类、父类和接口的方法奇怪的是,java路径ssist 没有提供删除一个类中字段、方法或者构造函数的任何方法

字段、方法和构造函数分别由 java路径ssist.CtField、java路径ssist.CtMethod 和 java路径ssist.CtConstructor 的实例表礻。这些类定义了修改由它们所表示的对象的所有方法的方法包括方法或者构造函数中的实际字节码内容。

* 为对象动态增加属性并同时为属性赋值 * 需要创建的java路径类的名称 * 字段-字段值的属性map,需要添加的属性

至此我们动态创建java路径类,并为java路径类添动态加属性就完成了反射机制是框架技术的原理和核心部分。通过反射机制我们可以动态的通过改变配置文件(以后是XML文件)的方式来加载类、调用類方法以及使用类属性。这样的话对于编码和维护带来相当大的便利。在程序进行改动的时候也只会改动相应的功能就行了,调用嘚方法是不用改的更不会一改就改全身。

貌似需要打成jar包引入到项目中財能通过反射找到。如果知道java路径文件的package可以通过手动编译加载类

你对这个回答的评价是

我要回帖

更多关于 java路径 的文章

 

随机推荐