流程:
第一,得到所有属性描述器
得到bean--》
得到bean的所有属性信息info(Introspector.getBeanInfo(bean.class))
--》
得到所有属性的描述器()info.getPropertyDescriptiors pds[]
-->遍历pds,得到每个属性的描述器
--》pd.getName,可以得到所有的属性名
--》通过属性名,获得想要的属性,
--》得到属性的get,set方法(pd.getReadMethod,pd.getWriteMethod)
--》使用,method.invoke(bean,"属性值");可以调用方法
第二,得到bean指定的属性的描述器
可以通过PropertyDescriptor的构造方法,得到指定属性名的属性
new PropertyDescriptor(propertyName,bean.class)
1.为什么要学内省?
开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性。
2.内省访问JavaBean属性的两种方式:
通过PropertyDescriptor类操作Bean的属性
通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。
3.Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单、易用的API操作Bean的属性——BeanUtils
Beanutils工具包的常用类:
BeanUtils
PropertyUtils
ConvertUtils.regsiter(Converter convert, Class clazz)
自定义转换器
4.commons-beanutils.jar log4j.jar
5.以下为java api中的内省方法
Student bean = new Student();
//得到bean的所有属性
BeanInfo info = Introspector.getBeanInfo(Student.class);
//得到bean的所有属性描述器
PropertyDescriptor pds[] = info.getPropertyDescriptors();
for(PropertyDescriptor pd : pds){ //name
String propertyName = pd.getName();
if(propertyName.equals("name")){
Method m = pd.getWriteMethod(); //setName(String name)
m.invoke(bean, "flx");
}
}
System.out.println(bean.getName());
}
//操作bean的指定属性: age
@Test
public void test2() throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
Student bean = new Student();
PropertyDescriptor pd = new PropertyDescriptor("age",bean.getClass());
Method method = pd.getWriteMethod(); //setAge(int age)
method.invoke(bean, 12);
//通过内省获取bean的age属性
method = pd.getReadMethod(); // getAge()
int age = (Integer) method.invoke(bean, null);
System.out.println(age);
分享到:
相关推荐
反射 API 是 Java 语言提供的一组 Application Programming Interface(API),用于在运行时获取类的信息和调用对象的方法。反射 API 主要包括 Class、Constructor、Method、Field 等类,它们提供了获取类的信息和...
3. **内省(Introspection)**:内省是Java提供的一组API,用于在运行时检查类的属性和方法。它可以查看类的信息,如字段、方法和构造函数,并进行调用,是反射的一个子集,但更专注于Bean属性的操作。 4. **注解...
这一章主要介绍了Java的基础语法,包括变量声明、数据类型(如int, double, boolean等)、运算符、控制流程(if-else, switch, for, while循环)、以及方法定义。学习者应掌握如何编写简单的Java程序,并理解变量的...
8. **内省(Introspection)**:通过反射API动态获取类的信息,如字段、方法等。 9. **IO流**:输入/输出流的使用,包括字符流和字节流,以及缓冲流、对象流、转换流等。 10. **多线程**:线程的创建(Thread类和...
5. **内省和反射**:Java的内省机制允许程序在运行时检查类和对象的信息,反射则可以在运行时动态创建对象和调用方法,这在插件系统和元编程中非常有用。 6. **多线程**:Java对多线程有着良好的支持,书中介绍了...
1. **Java基础**:书中首先介绍了Java语言的基础知识,包括变量、数据类型、运算符、流程控制(如if语句、for循环、while循环)、方法定义与调用,以及异常处理。这些基础知识构成了所有程序设计的基础。 2. **面向...
8. **其他核心概念**:书中还会涉及反射、注解、枚举、内省、垃圾收集、性能优化等Java开发中的重要概念和技术。 通过学习《Java核心技术 卷1 基础知识 原书第9版》,开发者不仅能掌握Java编程的基本技能,还能了解...
9. **内省增强(Introspection Enhancements)**:提供了对反射API的改进,增强了对注解的支持。 这些新特性的学习,将帮助你理解Java 5.0如何提升开发效率和代码质量。 在“良葛格java jdk 5.0学习笔记”中,可能...
今天我们将探讨的开源项目——"schemagen-graphql",便是其中的一员,它为我们提供了一种从POJO模型生成GraphQL类型内省以及graphql-java的附加功能。 `schemagen-graphql`项目主要关注于两个核心功能:类型内省...
8. **其他知识点**:除此之外,笔记可能还会涉及到反射、注解、枚举、内省、国际化、Java的日期时间API、JDBC数据库连接等主题,这些都是Java开发者必备的技能。 Garfield的SCJP阅读笔记通过文档形式记录了这些内容...
SAX(Simple API for XML)和DOM(Document Object Model)是两种常用的XML解析技术,而StAX(Streaming API for XML)则是Java 6中引入的事件驱动的解析方法。每种解析器都有自己的特点和适用场景,Castor提供了...
由于其内容不被JCP(Java Community Process)官方文档所涵盖,因此这部分源码通常被视为"私有API",不建议直接在应用程序中使用。然而,"sun"包包含了许多底层的实现,对于理解JVM(Java Virtual Machine)的工作...
在Java编程入门阶段,首先要理解基本语法,包括变量声明、数据类型、流程控制语句(如if-else,for,while循环)。Java的核心在于类(Class)和对象(Object),类是对象的模板,定义了对象的属性和行为。实例化一个...
- **内省**:Java API,用于获取和设置对象属性,调用方法等。 - **泛型**:增加代码类型安全性,减少类型转换。 - **注解**:元数据,提供编译时和运行时的信息。 - **动态代理**:动态创建实现特定接口的对象...
11. **内省与比较器**:探讨了如何通过Java的内省API获取类的信息,以及如何使用Comparator接口实现自定义比较规则。 12. **GUI编程**:通过Swing库展示了如何创建图形用户界面,包括组件、布局管理器、事件处理等...
- **定义**: Java API for XML Processing。 - **组成部分**: - DOM - SAX - XSLT - XPath **7.29 Tip:使用 JAXP 进行 DOM 解析** - **步骤**: 1. 加载 XML 文件。 2. 解析 XML。 3. 处理节点。 **7.30 ...
- **SAX解析**:介绍SAX(Simple API for XML)的解析流程及其优缺点。 - **DOM4J**:重点介绍DOM4J库的使用方法,提高XML文档的处理效率。 - **XML Schema**:探讨XML Schema的基本概念及约束规则的定义方法。 ###...
4. **监控**:提供用于内省和与不同类型的管理资源交互的用户界面。 ### 架构设计 #### 系统架构概览 TPTP的架构设计分为两个主要部分:前端展示系统和后端数据收集系统。 - **前端展示系统**:负责数据的可视化...
**7.8 内省—beanutils 工具包** - **功能**:BeanUtils是Apache提供的一个工具包,简化了Java Bean的操作。 - **使用场景**:复制对象属性、读取和设置属性值。 **7.9 泛型(Generic)** - **概念**:泛型是一种...