IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> OR05-大家都知道反射,那内省呢? -> 正文阅读

[Java知识库]OR05-大家都知道反射,那内省呢?

大家好,我是神韵,是一个技术&生活博主。据说是21天成一习惯,那么有没有一个习惯可以让你坚持一年的?我来试试!
每周5讲从2021-7-19开始,今天是2021-8-21,一轮计划是2022-7-18结束。关于文章都是定位为基础,我不敢讲的太深入,因为我怕自己没时间。欢迎来点赞打卡,你们的行动将是我无限的动力。
今日主题是:大家都知道反射,那你们知道什么是内省吗?

话不多说,下面进入今日主题

内省概念

内省(Introspector) 是Java 语言对 对象(JavaBean) 类属性、方法、事件的一种缺省处理方法。 Java JDK中提供了一套 API 用来访问某个属性的 get/set 方法,这就是内省。

反射和内省区别

反射核心是在运行时去操作对象的属性等,关键是运行时的状态,而内省是对对象(JavaBean)属性等的操作,并不强调运行时。

内省机制

内省机制是通过反射来实现的,内省有IntroSpector类、BeanInfo类和PropertyDescriptor类。一般的做法是通过类 Introspector 的 getBeanInfo方法来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器PropertyDescriptor,通过这个属性描述器就可以获取某个属性对应的 get/set方法,然后我们就可以通过反射机制来调用这些方法,这就是内省机制。
在这里插入图片描述

内省例子

public class OR05 {
    /**
     * 得到bean的所有属性
     * @throws Exception
     */
    @Test
    public void test1() throws Exception {
        // 通过Introspector获取OR_05的BeanInfo
        BeanInfo info = Introspector.getBeanInfo(OR_05.class, Object.class);
        // 通过BeanInfo取得属性描述器PropertyDescriptor
        PropertyDescriptor[] pds = info.getPropertyDescriptors();
        for (PropertyDescriptor pd : pds) {
            System.out.println(pd.getName());
        }
    }

    /**
     * 操纵bean的指定属性:name
     * @throws Exception
     */
    @Test
    public void test2() throws Exception {
        OR_05 or_05 = new OR_05();
        // 1、构造属性描述器 OR_05--name属性
        PropertyDescriptor pd = new PropertyDescriptor("name", OR_05.class);

        // 2、得到属性的写方法(setName方法),为属性赋值 -- 神韵
        Method method = pd.getWriteMethod();
        method.invoke(or_05, "神韵");

        // 3、获取属性的值 getAge() -- 神韵
        method = pd.getReadMethod();
        System.out.println(method.invoke(or_05, null));

        // 4、获取当前操作的属性的类型 name类型为String
        System.out.println(pd.getPropertyType());
    }

    class OR_05 {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

输出结果
在这里插入图片描述

本文结束!
ps:私信我可以进群。公众号每天会有推送,欢迎关注公众号查阅。
在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-22 13:25:07  更:2021-08-22 13:27:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:43:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码