自省

本文介绍了计算机编程中反射与自省的基本概念。反射是指在运行时获取对象的类型信息,如类名、构造器、方法等;而自省则侧重于检查对象自身的能力,如能做什么、知道什么。两者都是元编程的重要组成部分。

自省就是内省:  自己明白自己是什么,能做什么 ,  一个类具有什么功能由自己决定,而不由外部决定

是反射的具体实现,  在python中 反射被说为是自省(introspection)

 

简单说:反射主外  内省主内

 

反射(reflection)

可以在运行时获得对象的类型信息。 比如对于一个JAVA对象,它的类型信息包括

1,这个对象的所属的类(class)

2,这个类 的 构造器(constructor)

2,这个类 中 声明的方法(method)

3,这个类 中 声明的属性(field)

4,这个类 中 声明的注解(annotation)

5,这个类 的 父类(superclass)

6,这个类 实现的 接口(interface)

自省( introspection

检查某些事物以确定它是什么、它知道什么以及它能做什么

Java中的自省机制是一种允许程序在运行时检查类和对象的属性和方法的能力。这种机制特别适用于JavaBean组件,因为它们遵循特定的设计模式,使得自省能够识别出属性的getter和setter方法。自省机制不同于反射机制,尽管两者都涉及到运行时的类信息处理,但自省更专注于JavaBean的属性管理。 自省机制的工作原理涉及几个关键步骤。首先,通过`Introspector`类获取一个`BeanInfo`对象,该对象包含了JavaBean的所有属性信息。接着,使用`BeanInfo`对象获取`PropertyDescriptor`数组,每个`PropertyDescriptor`代表一个属性,并提供了获取和设置该属性值的方法。这些方法可以通过反射来调用,从而实现对JavaBean属性的操作。 下面是一个简单的示例,展示如何使用自省机制来获取JavaBean的属性信息: ```java import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; public class BeanInfoExample { public static void main(String[] args) throws Exception { // 获取BeanInfo对象 BeanInfo beanInfo = Introspector.getBeanInfo(MyBean.class); // 获取PropertyDescriptor数组 PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); // 遍历PropertyDescriptor数组 for (PropertyDescriptor pd : propertyDescriptors) { System.out.println("Property name: " + pd.getName()); Method getter = pd.getReadMethod(); Method setter = pd.getWriteMethod(); if (getter != null) { System.out.println("Getter method: " + getter.getName()); } if (setter != null) { System.out.println("Setter method: " + setter.getName()); } } } } // 一个简单的JavaBean class MyBean { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } ``` 在这个例子中,`MyBean`类是一个符合JavaBean规范的类,它有一个名为`name`的属性,并提供了相应的getter和setter方法。当运行`BeanInfoExample`时,它会输出`name`属性的getter和setter方法名。 自省机制的一个重要特性是它假设任何带有getter或setter方法的类都有一个对应的字段。例如,如果存在`getName()`方法,自省机制会认为该类有一个`name`字段,即使实际上并没有这个字段[^3]。这种方法简化了属性的发现过程,但也可能导致一些误解,因为它依赖于方法命名约定而不是实际的字段存在。 总结来说,Java中的自省机制提供了一种方便的方式来访问和操作JavaBean的属性,而无需显式地知道这些属性的名字或类型。这是通过分析类的方法并推断出属性信息来实现的。这种方法不仅提高了代码的灵活性,还促进了组件之间的解耦合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值