内省机制(操作javaBean的信息)
内省机制(操作javaBean的信息)
----是不是联想到了反射机制了哈,这两者有什么区别呢?
1、内省机制和反射机制的联系
■ 其实内省机制也是通过反射来实现的,而反射是对一切类都适合去动态获取类的信息,而内省机制是sun公司针对特殊的类---javaBean推出的技术。内省机制就是用来获取javabean的信息的。
2、什么是javaBean?
■ 比较官方的描述:javaBean 是一种java 语言写成的可重用的组件(类)。
■ 简单理解:就是一种特殊类,遵循特定的规范,遵循的规范如下:
必须使用 public 修饰(javabean)类
(javabean)类必须有公共无参构造器
包含有属性的操作手段(获取属性值或给属性赋值---getter/setter)
■ javaBean 可以很复杂,也可以很简单。
javabean 可以有的信息(不是必备):方法Method、事件event、属性property
补充一下属性property:表示状态,不是字段,是字段的操作方法getter、setter方法决定的,判断属性看getter/setter
□ 复杂的javabean拥有了事件、属性、方法,例如UI(button、panel、window类);
□ 简单的javabean,最简单最常用的有实体类domain-包含了属性和操作属性的getter、setter方法,还有dao、service组件,封装数据,操作数据库,逻辑运算等。
3、内省机制(自省机制)的作用:就是用来查看和操作javaBean的信息(属性、方法、事件)
--------一般常用来操作简单的javaBean(domain类)的属性。
(1)获取属性名或属性类型
(2)设置属性值或获取属性值-通过反射调用setter或getter方法(setter/getter)
4、内省机制的核心类---Introspector
注意核心类在哪个包,例如反射-Class在lang包里,内省的Introspector在beans包里抓住核心类Introspector(学习的突破口),顺腾摸瓜,例如反射抓住核心类Class,然后顺藤摸瓜,获得构造器Constructor、方法Method;
我们知道javaBean可以具有属性、事件、方法,而操作javabean的内省机制,它的核心类Introspector就是操作javaBean的属性、事件、方法。
5、Introspector(核心类、学习内省机制的突破口、学习操作javaBean的学习入口)---操作javaBean
第一步就是先得到该javaBean:【在突破口中:
得到javaBean的描述对象BeanInfo对象】- 方法getBeanInfo的参数是该javaBean的字节码,结果是得到javaBean的信息---BeanInfo对象(javaBean的描述对象)

第二个突破口拥有javaBean的一切的BeanInfo:【在突破口中:
得到javaBean的属性描述器PropertyDescriptor】- 方法getPropertyDescriptors(),结果是得到javaBean的属性信息---PropertyDescriptor属性数组对象(javaBean的属性描述器对象)

第三个突破口拥有javaBean的属性的一切的PropertyDescriptor:【在突破口中:
得到关于属性的操作】- 属性描述器是数组----遍历

6、内省机制操作javaBean的属性代码如下:
@Test
public void testIntrospector() throws Exception {
//1、通过突破口(核心类Introspector)获取javaBean描述对象BeanInfo
BeanInfo beanInfo = Introspector.getBeanInfo(Person.class,Object.class);
//2、获取javaBean中的属性描述器
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
//创建一个Person对象
Person person = new Person();
for (PropertyDescriptor pd : pds) {//遍历数组描述器数组
//3-1、获取当前的属性的属性名
System.out.println("当前属性的属性名是:" +pd.getName());
System.out.println("当前属性的getter方法是:" +pd.getReadMethod());
System.out.println("当前属性的setter方法是:" +pd.getWriteMethod());
if("name".equals(pd.getName())) {//若当前属性名是name【不能直接使用setName方法,因为反射的时候并不知道是哪个具体的方法】
Method setter = pd.getWriteMethod();//3-2、获取setter方法
setter.invoke(person, "shan");//设置当前person对象的name值为shan
}
}
}
内省机制(操作javaBean的信息)的更多相关文章
- 使用内省方式操作JavaBean
内省,英文中称作introspector.主要对javaBean进行操作,JavaBean是一个特殊的Java类,该类中方法名符合特定的规则(其实就是getXXX,setXXX),我们一般是利用get ...
- 通过内省机制设置JavaBean
一.步骤: 1)使用PropertyDescriptor类获取属性描述者对象 //pd引用Student的name属性 PropertyDescriptor pd = new PropertyDesc ...
- [新手学Java]使用内省(Introspector)操作JavaBean属性
获取类bean中的所有属性: @Test //获取类bean中的所有属性 public void test1() throws Exception{ BeanInfo info = Introspec ...
- (反射+内省机制的运用)简单模拟spring IoC容器的操作
简单模拟spring IoC容器的操作[管理对象的创建.管理对象的依赖关系,例如属性设置] 实体类Hello package com.shan.hello; public class Hello { ...
- 反射常用API以及内省机制(代码)
学习内容: (1)获取构造函数 这里不贴Person类了,不然代码太多太乱了,只给出一些常用API // 创建字节码对象 Class<?> aClass = Class.forName(& ...
- 内省操作javabean的属性
import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector ...
- Spring 属性注入(一)JavaBean 内省机制在 BeanWrapper 中的应用
Spring 属性注入(一)JavaBean 内省机制在 BeanWrapper 中的应用 Spring 系列目录(https://www.cnblogs.com/binarylei/p/101174 ...
- 使用内省的方式操作JavaBean
import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; im ...
- java内省机制及PropertyUtils使用方法
背景 一般情况下,在Java中你可以通过get方法轻松获取beans中的属性值.但是,当你事先不知道beans的类型或者将要访问或修改的属性名时,该怎么办?Java语言中提供了一些像java.bean ...
随机推荐
- Kubernetes三大落地姿势,你pick谁?
Kubernetes是面向企业的开源容器编排工具的事实标准,它提供了应用部署.扩展.容器管理等功能.经过几年的发展,Kubernetes已成为云计算和现代IT基础架构的通用平台,得到广泛应用进入产业落 ...
- 【原创】阿里三面:搞透Kafka的存储架构,看这篇就够了
阅读本文大约需要30分钟.这篇文章干货很多,希望你可以耐心读完. 你好, 我是华仔,在这个 1024 程序员特殊的节日里,又和大家见面了. 从这篇文章开始,我将对 Kafka 专项知识进行深度剖析, ...
- docker 修改容器env配置
docker 修改容器env配置 场景:修改zabbix数据库密码 zabbix容器构成: 数据库:zabbix-mysql server端:zabbix-server-mysql web端:zabb ...
- 【分享代码】bash中对一个逗号分隔的列表去重
直接上代码: #!/bin/bash dedup_list(){ v_list=$(echo "$1" | sed "s/,/\n/g" | sort -u | ...
- VictoriaMetrics:使用vmctl来实现vm-storage向victoria-metrics-prod(单机版)迁移数据
前一篇提到了,vm-storage的备份数据,无法被victoria-metrics-prod(单机版)读取. 继续翻文档发现vmctl可以实现这个效果: 1.启动vm-restore恢复数据 vmr ...
- Vscode不能连接应用商店
删除这两个文件即可: 1.C:\Users\Administrator\.vscode 2.C:\Users\Administrator\AppData\Roaming\Code
- url地址如何定位到Servlet程序去访问
- 001 研发同学必学哪些 Linux 命令?
01 研发同学为啥要掌握 Linux 命令? 身为研发同学,Linux 是绕不过去的一个小山包,不是说要掌握的十分精通,在程序员界里做个极客,也不是说要抢了 Devops 同学的饭碗,但至少要做到摆脱 ...
- K8S探针和SVC,POD原理
(6)容器是否健康: spec.container.livenessProbe.若不健康,则Pod有可能被重启(可配置策略) (7)容器是否可用: spec.container.readiness ...
- 学习JAVAWEB第二天
DML:C:添加数据INSERT INTO 表名(列名1,2...) Values(值1,2,3..)查询表select * from表名D:删除数据delete from 表名 where 条件(i ...