Java反射与内省机制总结
来源:互联网 发布:云上数据属于 编辑:程序博客网 时间:2024/05/31 20:51
一:反射
1.什么是反射
反射就是在运行状态把Java 类中的各种成分映射成相应相应的Java 类,可以动态得获取所有的属性以及动态调用任意一个方法。 1).一段java代码在程序的运行期间会经历三个阶段:source-->class-->runtime
2).Class对象
在java中用一个Class对象来表示一个java类的class阶段
Class对象封装了一个java类定义的成员变量、成员方法、构造方法、包名、类名等。
2.反射怎么用
1).获得java类的各个组成部分,首先需要获得代表java类的Class对象
获得Class对象有以下三种方式:
Class.forname(className) 用于做类加载
obj.getClass() 用于获得对象的类型
类名.class 用于获得指定的类型,传参用
2).反射类的构造方法,获得实例
Class clazz = 类名.class;
Constuctor con = clazz.getConstructor(new Class[]{paramClazz1,paramClazz2,.....});
con.newInstance(params....);
3).反射类的成员方法
Method m = clazz.getMethod(methodName,new Class[]{paramClazz1,paramClazz2,.....});
m.invoke();
4).反射类的属性
Field field = clazz.getField(fieldName);
field.setAccessible(true);//设置为可访问
filed.setObject(value); //设置值
Object value = field.get(clazz); //获得值
Object staticValue = filed.get(Class); //获得静态值
二:内省
1.什么是内省
通过反射的方式操作JavaBean的属性,jdk提供了PropertyDescription类来操作访问JavaBean的属性,Beantils工具基于此来实现。
2.内省怎么用
1).操作一个属性
Object obj = new Object();
PropertyDescriptor pd = new PropertyDescriptor(propertyName,Class); //声明属性描述对象,一次只可描述一个属性
Method m = pd.getWriterMethod();//获取setter方法
m.invoke(obj,value);
Method m = pd.getReaderMethod();//获取getter方法
Object value = m.invoke(obj);
2).操作多个属性
BeanInfo bi = Instospector.getBeanInfo(beanClass);//获取Bean描述对象
PropertyDescriptor[] pds = bi.getPropertyDescriptors();//获取属性描述对象数组
拿到属性描述对象数组之后再循环数组,剩余的操作就跟"操作一个属性"相同了。
三:两者区别
反射可以操作各种不同的java类,那么内省只是通过反射来操作JavaBean的。
四:应用
框架就是将开发中大量重复的代码其中起来写个通用的程序,框架是给将来的程序使用的,需要现在的类调用将来的,所以框架要运行是依赖于将来的类实现的。
我们只需要针对接口进行调用,将来的类实现接口,那么方法就固定了。但是将来写的类的类名我们无从得知,这时就需要调用者通过配置文件告诉框架具体的类名。
将java的反射以及内省机制应用到程序设计中可以大大提高程序的智能化和可扩展性。有很多项目都是使用这两种技术实现其核心功能的。例如BeanUtils,Struts等。
- Java反射与内省机制总结
- Java反射与内省机制总结
- 反射机制与内省
- java 内省机制与反射机制 的区别
- java内省与反射
- Java反射与内省
- java反射与内省
- Java 反射与内省
- Java反射与内省
- Java反射与内省
- java反射内省机制,Introspector
- java的反射与内省机制的实现
- java内省机制与反射实现工厂模式
- java反射与内省(Introspector)
- Java反射与内省(Introspector)
- Java反射与内省(Introspector)
- java反射与内省区别
- Java反射与内省(Introspector)
- 火车进站(全排列)
- shell getopt 用法
- Wpf GridSplitter usage Sample
- mtlab中如何在.mat和.txt之间转换
- Please ensure that adb is correctly located at
- Java反射与内省机制总结
- 顺序表与链表的比较
- 读《C专家编程》总结(一)
- cmd创建文件方法
- find用法例子
- Java问题解析:到底创建了几个String对象?
- (Relax 贪心1.4)POJ 2325 Persistent Numbers(使用贪心策略解决这么一个问题: 给定一个数n,求一个最小的数m,使得m的各位的乘积==n)
- java内存模型(java 并发编程基础)
- zoj An Awful Problem 3326