java内省的意思,Java内省机制
内省概述
内省(Introspector)是Java语言对JavaBean类的属性,事件和方法的默认处理方式
例如: 类User中有属性name,那么必定有getName,setName方法,内省就是通过这两个方法来获取或者设置name属性的值。
JavaBean
就是一个满足了特定格式的Java类
需要提供无参数的构造方法.
属性私有.
对私有的属性提供public的get/set方法.
内省类库
java.beans.Introspector:
该类提供了"了解目标JavaBean所支持的属性,事件和方法"的标准方式。
java.beans.BeanInfo:
该接口提供有关获取JavaBean的显式信息(公共的属性,方法,事件等)的方法。
java.beans.PropertyDescriptor:
该类描述 JavaBean的属性信息. 注意,该属性信息是通过JavaBean的get/set方法推导出的属性。
示例代码
1.存在类User
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
2.通过内省获取User类的所有属性:
public class StudentTest {
public static void main(String[] args) throws IntrospectionException {
// 通过Introspector.getBeanInfo方法获取指定JavaBean类的BeanInfo信息
BeanInfo beanInfo = Introspector.getBeanInfo(Student.class);
// 通过BeanInfo的getPropertyDescriptors方法获取被操作的JavaBean类的所有属性
// 注意,该属性是通过get/set方法推断出来的属性
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
// 遍历所有的属性
for (PropertyDescriptor pd : pds) {
// 获取属性的名字
String propName = pd.getName();
System.out.println(propName);
// 获取属性的类型
Class propType = pd.getPropertyType();
System.out.println(propType);
// 获取属性对应的get方法
Method getMethod = pd.getWriteMethod();
System.out.println(getMethod);
// 获取属性对应的set方法
Method setMethod = pd.getReadMethod();
System.out.println(setMethod);
}
}
}
3.创建一个User对象,通过内省,设置该对象的name属性的值为"张三丰"
// 创建一个没有任何参数的Student对象s
Student s = new Student();
// 通过PropertyDescriptor类的构造方法,直接获取Student类的name属性
PropertyDescriptor pd = new PropertyDescriptor("name",Student.class);
// 获取name属性对应的set方法
Method setMethod = pd.getWriteMethod();
// 调用set方法给上边创建的s对象的name属性赋值
setMethod.invoke(s, "张三丰");
// 输出s
System.out.println(s);
4.输出结果为:
Student [name=张三丰, age=0]
应用场景
在很多JavaWeb框架设计的时候,会使用到内省机制.
如:
Web开发框架Struts中的FormBean就是通过内省机制来将表单中的数据映射到类的属性上.
BeanUtils框架的底层也是通过内省来操作JavaBean对象的.
BeanUtils
BeanUtils是一个由Apache软件基金组织编写的,专门用来操作JavaBean对象的一个工具.
主要解决的问题是:可以把对象的属性数据封装到对象中。
它的底层,就是通过内省来实现的.
// 向Map集合中封装数据 -- 模拟在javaWeb中,使用request.getParameterMap() 获取的参数数据;
Map map = new HashMap() ;
map.put("name", "张三丰") ;
map.put("age", 200) ;
// 创建一个Student对象
Student s = new Student();
// 通过BeanUtils的populate方法,可以把Map集合中的数据封装到Student中
// 该方法的底层就是通过内省来实现的
BeanUtils.populate(s, map);
扩展
内省机制是通过反射来实现的
标签:Java,name,age,内省,Student,机制,public,属性
来源: https://blog.51cto.com/14473726/2438783
java内省的意思,Java内省机制相关推荐
- java内省的意思,java内省机制 + 内省是什么 + 内省实现方式 + 和反射的区别
见:https://zhidao.baidu.com/question/434288330.html.http://blog.csdn.net/u014394715/article/details/5 ...
- java内省的意思_java内省和反射的区别
展开全部 经过多方面的资料搜集整理,写下了这篇文章,本文主要讲解java的反射和内e68a843231313335323631343130323136353331333363366237省机制,希望对 ...
- java 内省源码_java 内省
用内省来操作Bean会给程序带来很大的便利,特别是在很大的实体对象的时候,在其属性很多的时候要为其赋值的时候, package com.bean; public class User { privat ...
- Java学习总结:39(反射机制)
反射机制 JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制. Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属 ...
- 【Java】反射( reflection)机制 详解
目录 1. 定义 2. 用途(了解即可) 3. 反射的基本信息 4. 反射相关的类(重要) 4.1 Class类(反射机制的起源 ) 4.2 Class类中的相关方法(方法的使用方法在后边的示例当中) ...
- java class 生成对象_Java反射机制(创建Class对象的三种方式)
1:SUN提供的反射机制的类: java.lang.Class java.lang.reflect.Constructor java.lang.reflect.Field java.lang.refl ...
- 完成这个例子,说出java中针对异常的处理机制。
有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常,在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常.在客户端有一个类为TestC,有一个方 ...
- 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )
文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...
- 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )
文章目录 前言 一.线程池示例 二.newCachedThreadPool 线程池示例 三.newFixedThreadPool 线程池示例 三.newSingleThreadExecutor 线程池 ...
最新文章
- JVM对象分配回收算法
- thonny python ide_学习用 Thonny 写代码:一个面向初学者的Python IDE
- Apache Tomcat 文件包含漏洞(CVE-2020-1938)
- 用NiceTool在微信浏览器中下载APP
- 需求调研 现有系统梳理_对速度的需求,访问现有数据的速度提高了1000倍
- python文件编译_编译Python文件
- BugkuCTF-WEB题源码
- c语言汉字属于什么类型_空气悬浮风机在风机中属于什么类型?
- Proxy 简答实现 ViewModel 和 View
- python文件写入_python读写不同编码txt文件
- 精益生产管理中如何进行库存成本控制?
- 【研究】英文论文阅读——英语poor的研究人员的福利
- 路由器静态路由配置实验
- Android 第三方SDK的检测与提取
- 六一快乐!管她几岁,快乐万岁!
- UOS 1050e ARM架构(linux)安装TP-LINK TL-WN823N免驱版无线网卡驱动
- 考研英语真题笔记 2020,Java数据结构面试题及答案
- linux 文件转utf 8,在Linux系统下把文件转换为UTF-8编码
- 考研复试计算机英文介绍,2017年考研复试计算机专业英文自我介绍.doc
- web阴影shadow练习