`
波罗诺
  • 浏览: 28179 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java api内省的流程

阅读更多
流程:

第一,得到所有属性描述器
得到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);
分享到:
评论

相关推荐

    java反射全解(反射原理+反射API详解+反射与数组+反射与泛型+反射源码与性能开销+反射优缺点+反射与内省)

    反射 API 是 Java 语言提供的一组 Application Programming Interface(API),用于在运行时获取类的信息和调用对象的方法。反射 API 主要包括 Class、Constructor、Method、Field 等类,它们提供了获取类的信息和...

    Java基础加强-个人总结doc

    3. **内省(Introspection)**:内省是Java提供的一组API,用于在运行时检查类的属性和方法。它可以查看类的信息,如字段、方法和构造函数,并进行调用,是反射的一个子集,但更专注于Bean属性的操作。 4. **注解...

    Java语言程序设计源代码

    这一章主要介绍了Java的基础语法,包括变量声明、数据类型(如int, double, boolean等)、运算符、控制流程(if-else, switch, for, while循环)、以及方法定义。学习者应掌握如何编写简单的Java程序,并理解变量的...

    java_base1_lang.rar_java_base1_lang ppt

    8. **内省(Introspection)**:通过反射API动态获取类的信息,如字段、方法等。 9. **IO流**:输入/输出流的使用,包括字符流和字节流,以及缓冲流、对象流、转换流等。 10. **多线程**:线程的创建(Thread类和...

    Think in jave 最经典的JAVA学习资料

    5. **内省和反射**:Java的内省机制允许程序在运行时检查类和对象的信息,反射则可以在运行时动态创建对象和调用方法,这在插件系统和元编程中非常有用。 6. **多线程**:Java对多线程有着良好的支持,书中介绍了...

    Thinking.In.Java.3rd.Edition

    1. **Java基础**:书中首先介绍了Java语言的基础知识,包括变量、数据类型、运算符、流程控制(如if语句、for循环、while循环)、方法定义与调用,以及异常处理。这些基础知识构成了所有程序设计的基础。 2. **面向...

    Java核心技术 卷1 基础知识 原书第9版

    8. **其他核心概念**:书中还会涉及反射、注解、枚举、内省、垃圾收集、性能优化等Java开发中的重要概念和技术。 通过学习《Java核心技术 卷1 基础知识 原书第9版》,开发者不仅能掌握Java编程的基本技能,还能了解...

    良葛格java jdk 5.0学习笔

    9. **内省增强(Introspection Enhancements)**:提供了对反射API的改进,增强了对注解的支持。 这些新特性的学习,将帮助你理解Java 5.0如何提升开发效率和代码质量。 在“良葛格java jdk 5.0学习笔记”中,可能...

    larp-kalenteri-rest-model-3.2.133.zip

    今天我们将探讨的开源项目——"schemagen-graphql",便是其中的一员,它为我们提供了一种从POJO模型生成GraphQL类型内省以及graphql-java的附加功能。 `schemagen-graphql`项目主要关注于两个核心功能:类型内省...

    Garfield 的 SCJP 阅读笔记

    8. **其他知识点**:除此之外,笔记可能还会涉及到反射、注解、枚举、内省、国际化、Java的日期时间API、JDBC数据库连接等主题,这些都是Java开发者必备的技能。 Garfield的SCJP阅读笔记通过文档形式记录了这些内容...

    castor 学习文档英文原版

    SAX(Simple API for XML)和DOM(Document Object Model)是两种常用的XML解析技术,而StAX(Streaming API for XML)则是Java 6中引入的事件驱动的解析方法。每种解析器都有自己的特点和适用场景,Castor提供了...

    jdk1.8源码包含sun

    由于其内容不被JCP(Java Community Process)官方文档所涵盖,因此这部分源码通常被视为"私有API",不建议直接在应用程序中使用。然而,"sun"包包含了许多底层的实现,对于理解JVM(Java Virtual Machine)的工作...

    圣安德鲁斯⼤学计算机科学学院-⾯向对象建模、设计和编程-⽂本对⻬

    在Java编程入门阶段,首先要理解基本语法,包括变量声明、数据类型、流程控制语句(如if-else,for,while循环)。Java的核心在于类(Class)和对象(Object),类是对象的模板,定义了对象的属性和行为。实例化一个...

    大数据分析培训机构学习路线.docx

    - **内省**:Java API,用于获取和设置对象属性,调用方法等。 - **泛型**:增加代码类型安全性,减少类型转换。 - **注解**:元数据,提供编译时和运行时的信息。 - **动态代理**:动态创建实现特定接口的对象...

    thinkinjava源码-ThinkInJava4:ThinkInJava4源代码

    11. **内省与比较器**:探讨了如何通过Java的内省API获取类的信息,以及如何使用Comparator接口实现自定义比较规则。 12. **GUI编程**:通过Swing库展示了如何创建图形用户界面,包括组件、布局管理器、事件处理等...

    传智播客 方立勋 javaweb 完全笔记

    - **定义**: Java API for XML Processing。 - **组成部分**: - DOM - SAX - XSLT - XPath **7.29 Tip:使用 JAXP 进行 DOM 解析** - **步骤**: 1. 加载 XML 文件。 2. 解析 XML。 3. 处理节点。 **7.30 ...

    方立勋30天轻松掌握JavaWeb视频笔记

    - **SAX解析**:介绍SAX(Simple API for XML)的解析流程及其优缺点。 - **DOM4J**:重点介绍DOM4J库的使用方法,提高XML文档的处理效率。 - **XML Schema**:探讨XML Schema的基本概念及约束规则的定义方法。 ###...

    Profiling and Testing with Test and Performance Tools Platform.pdf

    4. **监控**:提供用于内省和与不同类型的管理资源交互的用户界面。 ### 架构设计 #### 系统架构概览 TPTP的架构设计分为两个主要部分:前端展示系统和后端数据收集系统。 - **前端展示系统**:负责数据的可视化...

    方立勋JavaWeb ppt、代码

    **7.8 内省—beanutils 工具包** - **功能**:BeanUtils是Apache提供的一个工具包,简化了Java Bean的操作。 - **使用场景**:复制对象属性、读取和设置属性值。 **7.9 泛型(Generic)** - **概念**:泛型是一种...

Global site tag (gtag.js) - Google Analytics