java反射机制及其应用
2018-03-16 17:44
232 查看
Java反射机制是在运行状态中,对任意一个类都能够知道这个类的所以属性和方法;对于任意一个对象都能够调用它的任意一个方法。这种动态获取信息和动态调用对象方法的功能称为Java语言的反射机制。
类的反射机制中类有Class对应,方法有Method对应,属性由Field对应。
在运行中查看对象,例如,编写一个toString方法供所有类使用。
实现通用的数组操作代码。
利用Method对象。
通过Class的newInstance()方法
该方法要求该Class对象的对应类有无参构造函数
例:
通过Constructor的newInstance()方法
先使用Class对象获得指定的Constructor对象
再调用Constructor对象的newInstance()方法来创建该Class对象对应类的对象
通过该方法可以选择使用指定的构造方法来创建对象
例:
spring通过配置进行实例化对象并放到容器中的伪代码:
通过解析xml文件,获取到id属性和class属性里面的内容,利用反射原理获取到配置里面类的实例对象,存入到Spring的bean容器中。
总结:
只要在代码或配置文件中看到类的完整路径(包.类),其底层原理基本上使用的就是Java的反射机制。
类的反射机制中类有Class对应,方法有Method对应,属性由Field对应。
反射机制的功能
在运行中分析类的功能。在运行中查看对象,例如,编写一个toString方法供所有类使用。
实现通用的数组操作代码。
利用Method对象。
反射机制的优点
可以实现动态创建对象和编译,体现出很大的灵活性(特别是在J2EE的开发中它的灵活性就表现的十分明显)。通过反射机制我们可以获得类的各种内容,进行了反编译。对于JAVA这种先编译再运行的语言来说,反射机制可以使代码更加灵活,更加容易实现面向对象。Class类
使用反射动态创建对象实例的两种方式通过Class的newInstance()方法
该方法要求该Class对象的对应类有无参构造函数
例:
Class clazz = Class.forName("entity.User"); Object obj = clazz.newInstance();
通过Constructor的newInstance()方法
先使用Class对象获得指定的Constructor对象
再调用Constructor对象的newInstance()方法来创建该Class对象对应类的对象
通过该方法可以选择使用指定的构造方法来创建对象
例:
Class clazz = Class.forName("entity.User"); //指定有参的构造方法 Constructor cons = clazz.getConstructor(new Class[] {int.class,String.class,String.class}); //使用有参数的构造方法实例对象 Object obj = cons.newInstance(new Object[]{1,"scott","1234"}); //转换为实际操作类 User user = (User)obj;
java反射这Spring IOC中的应用
在spring配置文件中有<bean id="courseDao" class="com.qcjy.learning.Dao.impl.CourseDaoImpl"></bean>
spring通过配置进行实例化对象并放到容器中的伪代码:
//解析<bean .../>元素的id属性得到该字符串值为“courseDao” String idStr = "courseDao"; //解析<bean .../>元素的class属性得到该字符串值为“com.qcjy.learning.Dao.impl.CourseDaoImpl” String classStr = "com.qcjy.learning.Dao.impl.CourseDaoImpl"; //利用反射知识,通过classStr获取Class类对象 Class<?> cls = Class.forName(classStr); //实例化对象 Object obj = cls.newInstance(); //container表示Spring容器 container.put(idStr, obj);
通过解析xml文件,获取到id属性和class属性里面的内容,利用反射原理获取到配置里面类的实例对象,存入到Spring的bean容器中。
总结:
只要在代码或配置文件中看到类的完整路径(包.类),其底层原理基本上使用的就是Java的反射机制。
相关文章推荐
- Scala中上下文界定内幕中的隐式参数与隐式参数的实战详解及其在Spark中的应用源码解析之Scala学习笔记-52
- catalan数及其应用
- 人工神经网络及其在医学影像分析中的应用
- SVD分解算法及其应用
- 实验一线性表的基本操作及其应用
- linux fork() 函数应用及其详解
- 指针及其应用(二)
- 栈及其应用
- 实验六 二叉树的递归遍历及其应用
- 第十届机器学习及其应用研讨会 MLA’2012 Slides
- 矩阵重排序及其应用
- explorer 命令参数及其应用
- 视频会议系统及其应用
- 装饰者模式及其应用
- JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用
- 基于weka的关联规则挖掘及其apriori算法的应用
- 【转载】MySQL 外部XA及其在分布式事务中的应用分析
- Java数据结构-串及其应用-KMP模式匹配算法
- 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
- 自定义泛型方法及其应用和类型参数的类型推断