`
shangjava
  • 浏览: 1189180 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

利用java反射机制进行对象操作

阅读更多
我们经常使用COMMONS-BEANUTILS包来进行bean的操作,例如从map到bean获从bean到map的映射,那么实现的原理是什么呢,下面举个简单的操作的例子;首先,我建立一个bean
public class Bean {
private String test1;

private String getTest1() {
return test1;
}

private void setTest1(String test1) {
this.test1 = test1;
}
}

上面这个例子比较极端,利用我们平常的JAVA操作是不可能通过这两个私有方法进行设置和获取值的,但是我们利用JAVA反射机制却可以非常方便的操作。
下面,我将全部利用JAVA的反射来进行对象的创建,以及对它的操作;这里我们假设这个Bean我们只能得到名称,例如,我们是从配置文件中得到的名称,公司的COMMAND框架中receiver的配置就是如此,配置了receiver的名称和要执行的方法,我们无论他是否是私有的还是共有的都可以访问。
public class TestClass {

/**
* @param args
* @throws ClassNotFoundException
* @throws NoSuchMethodException
* @throws SecurityException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws IllegalArgumentException
* @throws InstantiationException
*/
public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
//1.0得到bean的Class对象
Class beanClass=Class.forName("org.test.t.Bean");
//2.0利用构造函数构造一个Bean对象
Constructor bc=beanClass.getConstructor(null);
Bean b=(Bean) bc.newInstance(null);
/**
* 也可以这样构造
* Bean b=Class.forName("org.test.t.Bean").newInstance();
*/

//3.0通过getDeclaredMethod方法得到要执行的方法(public/protected/private/默认),要执行的方法的函数名字是第一个参数指定,第二个参数指定该函数带有的参数
//如果只需要得到公共成员方法,则直接调用getMethod方法
Method setMethod=beanClass.getDeclaredMethod("setTest1", new Class[]{String.class});
Method getMethod=beanClass.getDeclaredMethod("getTest1", null);
//4.0 如果要访问私有的方法,所以我们在这里将可访问设置为true,则JVM不会执行访问控制检查;如果是共有方法则不需要设置
setMethod.setAccessible(true);
//5.0用得到的方法对象在第2步中构造的对象中执行
setMethod.invoke(b, new Object[]{"hello"});
System.out.println(getMethod.isAccessible());
getMethod.setAccessible(true);
System.out.println(getMethod.isAccessible());
System.out.println(getMethod.invoke(b, null));

}

}
上面红色部分是获取所有public/private/protected/默认 方法的函数,如果只需要获取public方法,则可以调用getMethod.

上面粉红色的方法是将要执行的方法对象设置是否进行访问检查,也就是说对于public/private/protected/默认 我们是否能够访问。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。
如果是共有方法,当然不需要设置。
分享到:
评论

相关推荐

    利用反射机制动态获取对象属性名称及数据类型

    利用反射机制动态获取对象属性名称及数据类型 利用反射机制动态获取对象属性名称及数据类型 利用反射机制动态获取对象属性名称及数据类型 利用反射机制动态获取对象属性名称及数据类型 利用反射机制动态获取对象属性...

    java反射机制的ppt

    什么是反射 Class类的介绍 如何用Class类获得类的构造方法、成员属性、成员方法 利用java反射机制动态创建对象 利用java反射机制动态调用成员方法和改变成员变量

    利用Java反射机制实现对象相同字段的复制操作

    主要介绍了利用Java反射机制实现对象相同字段的复制操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    利用反射机制对象转JSON

    利用Java的反射机制和json-lib包进行对象转JSON,包括set,list,object等,只需要对util类进行对应的配置即可。在对象转json的时候经常会出现对象持有set,list,date类型时会发生递归无限循环的情况,此代码完美...

    Java的反射机制讲解案例代码 Class类、 获取类的结构信息:构造函数、方法和字段,动态创建对象、调用方法和设置属性

    适用于有一定Java编程基础的开发人员,希望了解和应用Java反射机制的使用者。 使用场景及目标 使用反射机制的典型场景包括以下几个方面: 在运行时动态加载和创建类对象。 通过反射调用对象的方法和访问对象的字段...

    Java 反射机制详解

    Java 反射机制详解,适合初学者 1.获取 对象建模类的类型 的方法: 2.获取类中定义的构造方法: 获取类中定义的方法 获取类中定义的属性: 3.获取类实现的接口 4.利用反射实现类: 5.调用私有方法

    利用Java的反射与代理实现IOC模式

    利用Java的反射与代理实现IOC模式 在Java中,其反射和动态代理机制极其强大,我们可以通过其反 射机制在运行时获取信息。而代理是一种基本的设计模式,它是一种为了提供额外的或不同的操作而插入到真 实对象中的...

    将Map转换成Java实体

    使用 Core Java JDK1.8,将Map对象转换成Java实体对象的工具类完整代码。仅供交流学习。

    Qt 反射机制实现,通过类名创建对象

    反射是指程序在运行时动态获取对象属性与...简单一点说,就是可以通过类名称来创建一个类对象,这在Java和Object-C中是原生支持的,所以实现起来非常简单,但是C++就不支持了,如果想要用到反射机制,那就得自己实现。

    复习反射利用反射机制和AOP代理模式

    reflection是一系列的API,用于表示或者处理当前JVM中的类,接口和对象. java.lang.reflect/java.lang.Class 在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

    Java反射机制应用实践

     Java反射机制是一个非常强大的功能,在很多大型项目比如Spring, Mybatis都可以看见反射的身影。通过反射机制我们可以在运行期间获取对象的类型信息,利用这一特性我们可以实现工厂模式和代理模式等设计模式,...

    Class对象和Java反射机制

    其实从某种意义上说,在java中有两种对象:实例对象和Class对象。实例对象是我们平常定义的一个类的实例:  /**  * Created by aristark on 3/28/16.  */  public class Person {  }  然后利用new关键字...

    JsonParser.java

    利用java反射机制实现的json与java对象互相转化的工具,只暴露了两个空开的接口,其他接口都是私有的。

    深入理解Java类型信息(Class对象)与反射机制

    至于Java中出现RRTI的说法则是源于《ThinkinginJava》一书,其作用是在运行时识别一个对象的类型和类的信息,这里分两种:传统的”RRTI”,它假定我们在编译期已知道了所有类型(在没有反射机制创建和使用类对象时,...

    Java开发技术大全(500个源代码).

    listConstructors.java 利用反射机制获取构造器列表 listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.java 一个用于测试的...

    Java反射的简单使用

    先来一些不太实用的解释:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java...

    Java 反射机制的应用

    类)的路径,我们可以利用 Class.forName() 方法获取到给的的类,然后通过调用该类的 newInstance() 方法实例化此类的对象,这样就取代了使用 new 关键字实例化对象的操作方式。 通过调用类的 newInstance() 方法...

    反射+注解自定义ORM

    利用Java反射和注解实现自定义的ORM,并提供相应的工具类自动生成CRUD的SQL语句,同时定义了完整的异常处理机制

    JAVA_API1.6文档(中文)

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

Global site tag (gtag.js) - Google Analytics