随笔 - 50,  文章 - 0,  评论 - 0,  阅读 - 16786

微信公众号_CoderLi

何为 JavaBean ?

一种特殊的类、主要用于传递数据信息、这种类中的方法主要用于访问私有的字段、且方法符合某种命名规则。

JavaBean 的特征

  1. 属性都是私有的
  2. 存在无参构造方法
  3. 私有属性的 getter/setter 方法分别为 getXxx/setXxx
  4. getter 方法必须有返回值且无入参、setter 方法必须有入参且无返回值

符合这些特征的类、称为 JavaBean。

JDK 提供了一套 API 用来访问某个属性的 getter/setter 方法、这个就是 Java 内省。

内省与反射

反射:JVM 在运行的时、对任意的一个对象、都能访问到这个类的属性和方法。

内省 Introspector:是 Java 语言对 JavaBean 属性、事件的处理方式

  1. 反射针对的是任何类、任何对象、而内省只是针对 JavaBean。内省通过反射来操作 JavaBean 的属性。
  2. 内省设置属性值肯定调用 setter 方法、而反射则不一定 (Field 对象)
  3. 反射就像是镜子、能看到对象的所有、是客观事实。内省更像是主观判断、比如看到 getClass()、内省就会认为这个类中有 class 字段、但事实上则不一定。

例子

public class Main {
    public static void main(String[] args) throws Exception{
        BeanInfo beanInfo = Introspector.getBeanInfo(People.class);
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            System.out.print(propertyDescriptor.getName()+"   ");
        }
    }
    // 程序输出:age   class   name 
    // 为什么会输出class呢?前文中有提到,“看到getName(),内省就会认为这个类中有name字段,但事实上并不一定会有name”,我们知道每个对象都会有getClass方法,所以使用内省时,默认就认为它具有class这个字段
}

class People{
    String name;
		int 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;
  }
}

PropertyDescriptor:属性描述符,能够描述javaBean中的属性,通过属性描述符我们能知道这个属性的类型,获取到操纵属性的方法(getter/setter)

posted on   -CoderLi  阅读(156)  评论(0编辑  收藏  举报
编辑推荐:
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
阅读排行:
· C# 13 中的新增功能实操
· 万字长文详解Text-to-SQL
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· 卧槽!C 语言宏定义原来可以玩出这些花样?高手必看!
点击右上角即可分享
微信分享提示