内省是 Java 语言对 Bean 类属性、事件的一种缺省处理方法。我可以通过getter/setter访问,设置类中的属性。 Java 中提供了一套 API 用来访问某个属性的 getter/setter 方法,,这些 API 存放于包 java.beans 中。
一般的做法是通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后我们就可以通过反射机制来调用这些方法。
package com.tc.test;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
public class Introspector {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Introspector(String name, Integer age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Object object = new Introspector("hjz", 180);
try {
// getBeanInfo方法有三个重载,用法见API
BeanInfo beanInfo = java.beans.Introspector.getBeanInfo(object.getClass(), Object.class);
// 遍历属性
PropertyDescriptor[] descriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : descriptors) {
System.out.println(propertyDescriptor.getName());
}
// 读写属性
for (PropertyDescriptor propertyDescriptor : descriptors) {
try {
System.out.println(propertyDescriptor.getReadMethod().invoke(object, null));
System.out.println(propertyDescriptor.getWriteMethod().getName());
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (IntrospectionException e) {
e.printStackTrace();
}
}
}
对一个 Bean 类来讲,可以没有属性,但是只要有 getter/setter 方法中的其中一个,那么 Java 的内省机制就会认为存在一个属性,比如类中有方法 setMobile ,那么就认为存在一个 mobile 的属性,这样可以方便我们把 Bean 类通过一个接口来定义而不用去关心具体实现,不用去关心 Bean 中数据的存储。比如我们可以把所有的 getter/setter 方法放到接口里定义,但是真正数据的存取则是在具体类中去实现,这样可提高系统的扩展性。
分享到:
相关推荐
特别详细的java内省思维导图,全方面介绍java内省的功能以及用法用处。
Java内省(Introspector)是Java语言提供的一种机制,用于在运行时分析Java对象的属性、方法和事件。这个特性对于开发人员来说非常有用,因为它允许程序动态地检查和修改对象的状态,而不必了解对象的具体实现细节。...
Java内省(Introspection)是Java平台提供的一种机制,允许程序在运行时检查对象的属性和方法。这个特性在JavaBean的上下文中尤为重要,因为JavaBean是一种特殊类型的Java类,其方法遵循特定的命名约定,使得它们...
`Introspector` 是Java内省的核心类,它提供了一系列的方法来获取关于JavaBean的信息。例如,`Introspector.getBeanInfo(Class)` 方法可以获取指定类的BeanInfo,这包含了关于类的属性(PropertyDescriptor)、事件...
1. `commons-beanutils-1.9.2.jar`:这是Apache Commons BeanUtils库的一个版本,它是对Java内省功能的一个扩展和封装。BeanUtils库提供了一种简单的方式来操作JavaBeans,即具有getter和setter方法的对象。它简化了...
Java反射与内省是Java编程语言中的核心特性,它们为开发者提供了强大的能力,可以在运行时检查和操作类、接口、对象及其属性。本PPT深入探讨了这些概念,旨在帮助开发者充分利用Java平台的灵活性。 首先,Java反射...
"JAVA的内省机制(introspector)与反射机制(reflection)" JAVA 的内省机制(introspector)和反射机制(reflection)是两个重要的概念,在 JAVA 编程中扮演着至关重要的角色。那么,什么是内省机制和反射机制?它们...
### Java中的内省与反射详解 #### 一、引言 在深入了解Java语言的过程中,我们会遇到两个重要的概念:反射和内省。这两种技术在实际开发中有着广泛的应用,尤其是在需要进行动态操作或元数据处理的场景下尤为重要...
内省在Java中是通过java.beans包中的类来实现的,主要用于获取类的信息,如属性、方法等。在实现IOC时,内省可以用来动态地读取配置文件,了解对象的依赖关系,然后根据这些信息实例化和装配对象。例如,我们可以...
在IT领域,特别是Java编程中,递归获取所有超类以及内省获取所有属性和getter、setter方法是两个重要的概念。这些技术对于理解和操作Java对象的结构和行为至关重要。让我们详细探讨这两个主题。 首先,我们来看递归...
内省(Introspection)则是Java提供的一种用于获取和修改对象属性的能力,主要通过java.beans包中的Introspector和PropertyDescriptor类实现。它主要用于处理JavaBeans规范的对象,可以获取Bean的属性、事件和方法...
java 反射机制全解 java 反射机制是 Java 语言中的一种动态获取信息和调用对象方法的技术...内省是 Java 语言中的一种机制,用于获取对象的信息和调用对象的方法。反射机制可以动态地获取内省的信息和调用内省的方法。
- **Introspection (内省)**:指程序能够检查自身结构的能力。 - **Reflection (反射)**:指程序能够在运行时加载、探知、使用未知类的能力。 #### 四、Java反射API概述 Java反射机制主要依赖于`java.lang.reflect...
随着Java的不断发展,第二版规范(JLS 2nd Edition)涵盖了Java 1.1和1.2的主要更新,包括集合框架的引入、内省(Introspection)能力的增强、反射(Reflection)API的完善,以及新的I/O流和网络编程API。...
除此之外,你还可以期待看到输入输出流、反射、注解、枚举、枚举类型、内省、动态代理等高级Java特性的源代码示例。这些内容将帮助你提升到更高级的Java编程水平。 总之,这份《Thinking in Java 4》的源码是一个...
深入学习这些源代码,可以帮助读者掌握Java的高级特性和最佳实践,如模块系统、反射、注解、枚举、内省等。此外,还可以通过阅读和分析这些代码来提升对设计模式和面向对象设计原则的理解。总之,《JAVA核心技术-卷...
3. **内省(Introspection)**:改进了内省机制,使得获取类信息更加快速和高效。 对于Java 5的安装,有两个选项:在线版和离线版。在线版通常需要互联网连接,会自动下载必要的组件并进行安装。而离线版则包含了...
11. **内省(Introspection)**:Java 5对反射API进行了增强,使得程序可以在运行时检查类、接口、字段和方法的信息,增强了程序的动态性。 12. **编译器警告和错误**:Java 5引入了新的编译器警告和错误,如未使用...
- 内省(Introspection):允许组件公开其支持的操作和属性,方便其他组件发现和使用。 - 通信(Communication):组件间通过事件进行消息传递。 - 持续(Persistence):保存组件的状态,使得组件在不同会话之间...
Java 5.0的内省机制提供了获取和修改对象、类、接口等元数据的能力,如通过反射访问私有方法和字段。 12. **NIO.2(New I/O 2)** 虽然NIO.2是在Java 7中引入的,但它是对Java 5.0 NIO的扩展,增加了文件系统操作...