Java反射与内省

反射

用一句比较白的话来概括,反射就是让你可以通过名称来得到对象(类,属性,方法)的技术。

例如我们可以通过类名来生成一个类的实例;知道了方法名,就可以调用这个方法;知道了属性名就可以访问这个属性的值

内省

内省是Java语言对Bean类属性、事件的一种缺省处理方法。

JavaBean 属于反射,特殊与一般反射。可以说是一种较为特殊的反射方法,更为快捷的获相应的东西。

例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。通过getName/setName来访问name属性,这就是默认的规则。

Java中提供了一套API用来访问某个属性的getter/setter方法,通过这些API可以使你不需要了解这个规则,这些API存放于包java.beans中。

一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。

如果不想把父类的属性也列出来的话,那getBeanInfo的第二个参数填写stop的父类的信息。

Web开发框架Struts中的FormBean就是通过内省机制来将表单中的数据映射到类的属性上,因此要求FormBean的每个属性要有getter/setter方法。但也并不总是这样,什么意思呢?就是说对一个Bean类来讲,我可以没有属性,但是只要有getter/setter方法中的其中一个,那么Java的内省机制就会认为存在一个属性,比如类中有方法setMobile,那么就认为存在一个mobile的属性,这样可以方便我们把Bean类通过一个接口来定义而不用去关心具体实现,不用去关心Bean中数据的存储。比如我们可以把所有的getter/setter方法放到接口里定义,但是真正数据的存取则是在具体类中去实现,这样可提高系统的扩展性。

总结

将Java的反射以及内省应用到程序设计中去可以大大的提供程序的智能化和可扩展性。有很多项目都是采取这两种技术来实现其核心功能,例如我们前面提到的Struts,还有用于处理XML文件的Digester项目,其实应该说几乎所有的项目都或多或少的采用这两种技术。在实际应用过程中二者要相互结合方能发挥真正的智能化以及高度可扩展性。

时间: 2024-12-26 19:18:59

Java反射与内省的相关文章

JAVA反射之内省

JavaBean: 就是一个java类 属性全部私有,提供公有的getter,setter方法 提供一个无参的构造方法 类必须公有,必须打包 JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省. 内省API: Introspector类: 构建一个全面描述目标 bean 的 BeanInfo 对象 BeanInfo接口:封装bean的信息 实例通过Introspector的静态方法getBeanInfo(Class<?> beanClass)得到 MethodDescr

理解Java的反射与内省及其区别

java的内省机制和反射机制什么区别 内省操作只针对JavaBean,只有符合JavaBean规则的类的成员才可以采用内省API进行操作....而反射则不同,一个类的所有成员都可以进行反射操作. 内省和反射的操作也有很大不同,内省是先得到属性描述器PropertyDecriptor后再进行各种操作,反射则是先得到类的字节码Class后再进行各种操作的. 反射(reflection)(实现可扩展性智能化) 相对而言,反射比内省更容易理解一点.用一句比较白的话来概括,反射就是让你可以通过名称来得到对

Java中的内省与反射

很多朋友在深入的接触Java语言后就会发现这样两个词:反射和内省,在什么场合下应用以及如何使用?今天把这二者放在一起介绍,因为它们二者是相辅相成的. 反射 相对而言,反射比内省更容易理解一点.用一句比较白的话来概括,反射就是让你可以通过名称来得到对象(类,属性,方法)的技术.例如我们可以通过类名来生成一个类的实例:知道了方法名,就可以调用这个方法:知道了属性名就可以访问这个属性的值,还是写两个例子让大家更直观的了解反射的使用方法: //通过类名来构造一个类的实例 ClassClasscls_st

Java反射及 IoC原理、内省机制

JAVA反射及IoC原理.JAVA内省 1. 反射 反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述 主要指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. Java反射机制:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性. 1.2 反射机制的作用 在运行时判断任

java学习之内省

反射加内省解决耦合问题 1 package com.gh.introspector; 2 /** 3 * JavaBean 4 * @author ganhang 5 * 6 */ 7 public class Dog { 8 private String name; 9 private int age; 10 public String getName() { 11 12 return name; 13 } 14 public void setName(String name) { 15 th

Java 反射机制(一)

Java 反射机制 基本概念 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是肯定的. 这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射(Reflection)机制. Java反射机制主要提供了以下功能: 1.在运行时判断任意一个对象所属的类. 2.在运行时构造任意一个类的对象. 3.在运行时判断任意一个类所具有的成员变量和方法. 4.在运行时调用任意一个对象的方法. Reflection是Jav

公共技术点之 Java反射 Reflection

公共技术之 Java反射 Reflection 1. 了解Java中的反射 1.1 什么是Java的反射 Java反射是可以让我们在运行时获取类的函数.字段.父类.接口等Class内部信息的机制.通过反射还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法获取变量的值,即使方法或字段是私有的的也可以通过反射的形式调用,这种"看透class"的能力被称为内省,这种能力在框架开发中尤为重要. 有些情况下,我们要使用的类在运行时才会确定,这个时候我们不能在编译期就使用它,因此

Java反射学习一

Java 反射机制 基本概念 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是肯定的. 这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射(Reflection)机制. Java反射机制主要提供了以下功能: 1.在运行时判断任意一个对象所属的类. 2.在运行时构造任意一个类的对象. 3.在运行时判断任意一个类所具有的成员变量和方法. 4.在运行时调用任意一个对象的方法. Reflection是Jav

Java核心_内省

Java核心_内省 查看java的api,发现有一个包java.bean咦,这个包是干什么的呢,原来,它是用来操作JavaBean对象的! 一.内省操作①JavaBean:一种特殊的Java类无参构造方法,每个属性提供getter和setter/Introspector/src/yuki/core/introspector/bean/Point.java package yuki.core.introspector.bean; public class Point { private int x