内省机制(操作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的信息)的更多相关文章

  1. 使用内省方式操作JavaBean

    内省,英文中称作introspector.主要对javaBean进行操作,JavaBean是一个特殊的Java类,该类中方法名符合特定的规则(其实就是getXXX,setXXX),我们一般是利用get ...

  2. 通过内省机制设置JavaBean

    一.步骤: 1)使用PropertyDescriptor类获取属性描述者对象 //pd引用Student的name属性 PropertyDescriptor pd = new PropertyDesc ...

  3. [新手学Java]使用内省(Introspector)操作JavaBean属性

    获取类bean中的所有属性: @Test //获取类bean中的所有属性 public void test1() throws Exception{ BeanInfo info = Introspec ...

  4. (反射+内省机制的运用)简单模拟spring IoC容器的操作

    简单模拟spring IoC容器的操作[管理对象的创建.管理对象的依赖关系,例如属性设置] 实体类Hello package com.shan.hello; public class Hello { ...

  5. 反射常用API以及内省机制(代码)

    学习内容: (1)获取构造函数 这里不贴Person类了,不然代码太多太乱了,只给出一些常用API // 创建字节码对象 Class<?> aClass = Class.forName(& ...

  6. 内省操作javabean的属性

    import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector ...

  7. Spring 属性注入(一)JavaBean 内省机制在 BeanWrapper 中的应用

    Spring 属性注入(一)JavaBean 内省机制在 BeanWrapper 中的应用 Spring 系列目录(https://www.cnblogs.com/binarylei/p/101174 ...

  8. 使用内省的方式操作JavaBean

    import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; im ...

  9. java内省机制及PropertyUtils使用方法

    背景 一般情况下,在Java中你可以通过get方法轻松获取beans中的属性值.但是,当你事先不知道beans的类型或者将要访问或修改的属性名时,该怎么办?Java语言中提供了一些像java.bean ...

随机推荐

  1. 运行flutter-填坑之旅

    运行flutter; 1.有一个问题,解决了好长时间 如果你安装了IntelliJ IDEA 2017.2.7 x64,运行flutter的时候报错,是因为IntelliJ IDEA 2017.2.7 ...

  2. Flowable实战(六)集成JPA

      上文提到,Flowable所有的表单数据都保存在一张表(act_hi_varinst)中,随着时间的推移,表中数据越来越多,再加上数据没有结构优化,查询使用效率会越来越低.   在Flowable ...

  3. 『德不孤』Pytest框架 — 2、Pytest的基本使用

    目录 1.Pytest安装 2.Pytest常用插件 3.Pytest运行的第一个例子 4.Pytest框架的运行方式 5.在PyCharm中以Pytest的方式运行测试用例 1.Pytest安装 C ...

  4. vue文档1-VSCode介绍

    开发工具VSCode: Vue的开发工具用的是VSCode(Visual Studio Code),这款开发工具是微软官方出品,开源,免费,并且功能相当强大,使用者很多,插件相当丰富,是Vue开发的不 ...

  5. Maven作用及安装

    与传统开发项目相比使用Maven: 1)Maven可以管理jar文件 2)自动下载jar和它的文档,源代码 3)管理jar直接的依赖,a.jar需要b.jar,maven会自动下载b.jar 4)管理 ...

  6. Kubernetes:故障排查(Trouble Shooting)方法总结

    Blog:博客园 个人 本文部分内容源自网络,侵删. 概述 为了跟踪和发现在Kubernetes集群中运行的容器应用出现的问题,我们常用如下排查方法: 查看Kubernetes对象的当前运行时信息,特 ...

  7. electron-vue 项目添加启动loading动画问题

    前言 electron-vue脚手架搭建的项目,在开发阶段可能你注意不到项目启动慢的问题,但是在build 生成的exe可执行文件,启动后,要反应很久才能进入到app.vue 中加载的页面,体验性很差 ...

  8. 在树莓派上开发SpringBoot 之使用VSCode远程开发

    一些运行在ARM单板电脑上的IoT应用通常会提供RESTful风格的API接口.本次的文章记录如何在本地电脑上通过VS Code的远程开发功能,在树莓派端创建一个SpringBoot工程,并实现调试和 ...

  9. Linux 配置 dubbo 和 dubbo的简单介绍。

    一.是么是  dubbo? 一.dubbo? 1.因为项目之间需要相互调用,达到某种预期的结果 1.1 restful? 门户网站必须要知道用户的登录状态,但是用户的登录状态在登录项目中,所以门户网站 ...

  10. AT2348 [ARC070D] HonestOrUnkind

    不妨先从无解的情况下手,不难发现当 \(A \le B\) 时是一定无解的. 因为不诚实的 \(B\) 个人可以装作是诚实的,全部说自己这一方是诚实的对方是不诚实的我们就无法判断了. 下面我们就可以在 ...