反射机制之---概念

反射机制是Java语言中很重要的特性,是在运行时获知对象信息,并可在运行时操作对象的机制。

反射(Reflect), 顾名思义,通过Java对象的Class信息,可以逆向生成对象、探知运行时的对象信息、调用对象方法,一种可以反向作用的机制。

反射的用途:

1. 在运行时获取任意对象所属的类对象 

Class<?> clazz = Class.forName(String className);

2. 在运行时构造任意类的对象 

Object obj = clazz.newInstance();

3. 在运行时获取任意类所具有的成员变量和方法 

field.set(Object obj, Object value);

field.get(Object obj);

4. 在运行时调用任意对象的方法 (最常见的需求,尤其是当该方法是私有方法或者隐藏方法)

method.invoke(Object obj, Object... args);

通过反射机制,已知的应用有:

1. ORM框架使用了反射机制,来实现对象和数据表的映射关系;

2. 动态代理中使用反射机制,动态生成代理角色,这样比较好地解决了静态代理的代码膨胀问题。

常用的获取类信息方法:

1.  获取类对象

Class clazz = obj.getClass(); 

或 Class clazz = Class.forName(${className});

2. 获取对象中声明的方法:

Method[] methods = clazz.getDeclaredMethods();

3. 获取对象的属性数据:

Field[] fields = clazz.getDeclaredFields();

动态执行对象的方法:

1. Method.invoke()   动态执行对象的方法

如果是私有方法,先把Method的可见性设为true,然后再调用。

method.setAccessible(true);

2. Field.setXXX()   动态设置对象的属性

总结:

反射机制使Java语言在很大程序上增强了灵活性,在语言的动态的功能扩展上有了更多的想象力和空间。

猜你喜欢

转载自geeksun.iteye.com/blog/2341700
今日推荐