一:反射
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等。
引自:http://my.oschina.net/mlongbo/blog/77138
发表评论
-
java验证字符串中是否包含数字,对数字的操作
2016-03-15 11:01 9538在javascript中有一个方法 ... -
jdk7 Collections.sort()方法报非法参数异常
2016-03-03 18:57 12104JDK7的Comparison method violates ... -
log4j.properties配置详解
2016-01-18 16:50 1324Log4J的配置文件(Configuration File)就 ... -
Java 日期时间 Date类型,long类型,String类型表现形式的转换
2015-12-24 17:35 3313Java 日期时间 Date类型,long类型,String类 ... -
Java多线程-工具篇-BlockingQueue
2015-11-24 16:13 1013Java多线程-工具篇-Block ... -
Java 实例 - 队列(Queue)入门用法
2015-11-23 17:27 2032队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表 ... -
Java中序列化的serialVersionUID作用
2015-11-13 14:13 4879Java序列化是将一个对象 ... -
java的序列化和反序列化
2015-10-27 19:48 1148Java基础学习总结——Jav ... -
java中volatile关键字的含义
2015-08-12 20:10 787java中volatile关键字的含 ... -
Java读写文件中文乱码问题
2015-07-20 17:49 3003问题:在用Java程序进行读写含中文的txt文件时,经常会出现 ... -
String类中split方法的使用
2015-07-02 14:39 1026String类中split方法的使用 split 方法:将一个 ... -
PreparedStatement防止SQL注入
2015-04-11 16:27 2835一条效率差的sql语句,足以毁掉整个应用. Stateme ... -
Session的生命周期
2015-04-11 11:58 962我们已经知道,Session是在用户第一次访问网 ... -
JAVA多线程和并发基础
2015-04-11 11:58 803JAVA多线程和并发基础 ... -
Java中equals()与hashCode()方法详解
2015-04-08 16:19 920一.equals()方法详解 equals()方法在o ... -
json数据后台处理
2015-03-30 16:05 833JAVA解析JSON问题,怎么解析,急!! String j ... -
java判断list为空
2015-01-30 15:25 4006java判断list为空 if(null == list | ... -
httpclient使用实践
2015-01-09 17:09 1381httpclient是什么这里不再详述(可参考最下方网址);直 ... -
java反射获取属性和方法
2015-01-09 11:12 3141反射的应用一般是要用到某些特殊类的属性和方法,无论是一般方法还 ... -
java中int 转String位数不够前面补零
2015-01-08 21:53 20031java 中int 转String位数不够前面补零 Stri ...
相关推荐
Java反射与内省是Java编程语言中的核心特性,它们为开发者提供了强大的能力,可以在运行时检查和操作类、接口、对象及其属性。本PPT深入探讨了这些概念,旨在帮助开发者充分利用Java平台的灵活性。 首先,Java反射...
反射机制的分类包括反射 API、反射与数组、反射与泛型、反射源码与性能开销、反射优缺点、反射与内省等。 反射 API 是 Java 语言提供的一组 Application Programming Interface(API),用于在运行时获取类的信息和...
"JAVA的内省机制(introspector)与反射机制(reflection)" JAVA 的内省机制(introspector)和反射机制(reflection)是两个重要的概念,在 JAVA 编程中扮演着至关重要的角色。那么,什么是内省机制和反射机制?它们...
### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时获取和操作任何已知名称的类的内部信息。这一机制使得Java具备了一定的动态性,虽然在传统的分类中Java被视为静态类型语言。通过反射,开发者可以在...
### Java反射机制详解 #### 一、引言 Java反射机制是Java语言中一项重要的功能,使得Java在一定程度上具备了动态语言的特性。通过Java反射机制,可以在运行时获取类的信息并操作类的对象,这为Java应用开发带来了...
### Java中的内省与反射详解 #### 一、引言 在深入了解Java语言的过程中,我们会遇到两个重要的概念:反射和内省。这两种技术在实际开发中有着广泛的应用,尤其是在需要进行动态操作或元数据处理的场景下尤为重要...
反射是Java提供的一种强大的动态类型机制,它允许程序在运行时检查类的信息,如类名、属性、方法等,并能够创建和操作对象。Java.lang.reflect包提供了Class、Constructor、Method和Field等类来支持反射操作。 内省...
利用宏定义和模板来实现反射机制能够提供编译时的类型检查,并且能够将反射机制与类型系统结合得更紧密。泛型编程也能够作为实现反射机制的手段之一,它允许在编译时对类型进行操作,提高了类型安全和性能。 文档中...
Java反射机制是Java被视为动态语言的关键特性之一,它允许程序在运行时通过Reflection APIs获取任何已知名称的类的内部信息。这一机制使得开发者能够在运行时检查类的修饰符(如public、static等)、超类(如Object...
2. **反射机制**:Java反射是程序在运行时能够获取自身信息并操作类的能力。通过反射,我们可以动态创建对象、调用方法、访问私有成员,以及处理枚举和注解。这是Java灵活性的重要体现,常用于框架开发和元编程。 3...
Java反射API主要包括以下几个核心类: 1. **Class类**:每个类在JVM中都有一个对应的Class对象,它包含了类的所有信息。我们可以通过`Class.forName()`或者对象的`getClass()`方法来获取对应的Class对象。 2. **...
在书中,作者通过具体的例子展示了一系列的反射技术,包括但不限于动态代理、类加载器的使用、内省机制等。这些技术通常在开发中较为复杂且易出错,但本书深入浅出地解释了这些技术背后的概念,并提供了足够的背景...
总结,本主题主要涉及Java的IOC和AOP概念,以及如何通过内省技术实现类似Spring的功能。通过这个过程,我们可以更深入地理解Spring的工作原理,同时提高我们的编程技巧和解决问题的能力。在源码和工具方面,我们可以...
Java内省(Introspector)是Java语言提供的一种机制,用于在运行时分析Java对象的属性、方法和事件。...了解并熟练掌握Java内省机制,可以提高代码的灵活性和可维护性,尤其是在处理基于JavaBean的复杂系统时。