一、软件包 java.beans
包含与开发 beans 有关的类,即基于 JavaBeansTM 架构的组件
二、PropertyDescriptor
PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性
public class PropertyDescriptor extends FeatureDescriptor { //构造方法 //通过调用 getFoo 和 setFoo 存取方法,为符合标准 Java 约定的属性构造一个 PropertyDescriptor public PropertyDescriptor(String propertyName, Class<?> beanClass) throws IntrospectionException{} //获得属性的 Class 对象 public Class<?> getPropertyType(){} //获得应该用于读取属性值的方法 public Method getReadMethod(){} //获得应该用于写入属性值的方法 public Method getWriteMethod(){} }
三、示例
import java.beans.PropertyDescriptor; import java.lang.reflect.Method; public class IntrospectorDemo { public static void main(String[] args)throws Exception { Person p = new Person("李四",20); String propertyName = "name"; Object obj = getProperty(p,propertyName); System.out.println(obj); Object value = "王武"; setProperty(p, propertyName, value); System.out.println(p.getName()); } private static void setProperty(Object obj,String propertyName,Object value)throws Exception { PropertyDescriptor pd = new PropertyDescriptor(propertyName,obj.getClass()); Method setMethod = pd.getWriteMethod(); setMethod.invoke(obj, value); } private static Object getProperty(Object obj,String propertyName) throws Exception { PropertyDescriptor pd = new PropertyDescriptor(propertyName,obj.getClass()); Method getMethod = pd.getReadMethod(); return getMethod.invoke(obj); } } class Person { private String name; private int age; Person(String name,int age) { this.name = name; this.age = 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; } }
四、JavaBean的复杂内省操作
- 采用便利BeanInfo的所有属性方式来查找和设置某个Person的name属性
- 在程序中把一个类当作JavaBean来看
- 就是调用Introspector.getBeanInfo方法
- 得到的BeanInfo对象封装了把这个类当作JavaBean看的结果信息
/** * Introspector * Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法 * 对于这三种信息,Introspector 将分别分析 bean 的类和超类,寻找显式或隐式信息,使用这些信息构建一个全面描述目标 bean 的 BeanInfo 对象。 * 如果某个类提供有关其自身的显式 BeanInfo, * 则将它添加到从分析所有派生类得到的 BeanInfo 信息中,并将显式信息视为当前类及其基类的确定的信息,无需进一步深入超类链进行分析。 * 如果没有在某个类上发现显式 BeanInfo, * 则使用低层次的反射来研究类的方法,并应用标准设计模式来标识属性存储器、事件源或公共方法。 * 然后深入分析类的超类,从它那里(可能在超类链的顶部)添加信息。 */ public class Introspector { //没有构造方法,其余方法均为静态的 //在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件 public static BeanInfo getBeanInfo(Class<?> beanClass) throws IntrospectionException{} }
/** * BeanInfo * 希望提供有关其 bean 的显式信息的 bean 实现者可以提供某个 BeanInfo 类, * 该类实现此 BeanInfo 接口并提供有关其 bean 的方法、属性、事件等显式信息。 */ public interface BeanInfo { //获得 beans PropertyDescriptor PropertyDescriptor[] getPropertyDescriptors(); //获得 beans MethodDescriptor MethodDescriptor[] getMethodDescriptors(); }
//上述示例,用复杂的内省操作,代码如下 private static Object getProperty(Object obj,String propertyName) throws Exception { BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass()); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); Object retVal = null; for(PropertyDescriptor pd : pds) { if(pd.getName().equals(propertyName)) retVal = pd.getReadMethod().invoke(obj); } return retVal; }
相关推荐
`openbean.jar`是一个包含JavaBeans组件的库,特别适用于在Android Studio项目中使用`java.beans`包中的类和接口。`java.beans`包提供了许多用于创建、操作和序列化Java对象的工具,这些工具在桌面应用开发中非常...
JavaBeans包(java.beans)提供了与JavaBeans组件交互的相关类和接口,这些组件是Java面向对象设计的重要组成部分。在Java反射中,java.beans包特别用于处理属性(Property)、事件(Event)以及Bean的生命周期。 ...
`java.beans.PropertyDescriptor` 类用于封装 Java 对象的属性,提供了获取和设置属性值的方法。 3. **Event**: 事件是 Bean 中发生的有意义的事情。`java.beans.EventSetDescriptor` 描述了一个事件集,而 `java....
需要使用到java.beans.BeanInfo 等类,但是AS默认是没有这些类的,导致项目不能编译。使用openBeans.jar 方案能解决此问题。import 的包需要改一下。改成import com.googlecode.openbeans.BeanInfo。 解决
Java反射中java.beans包是一个非常重要的包,提供了许多有用的工具类和接口,帮助我们更好地实现Java对象的反射操作。本篇文章将通过学习Java反射中java.beans包,总结出相关的知识点,并将相关内容进行关联,对此有...
import java.beans.PropertyDescriptor; import java.lang.reflect.Method; public class myBeanIntrospector { public myBeanIntrospector() { try { // 实例化一个 Bean bean beanObj = new bean(); // ...
`java.beans`包是Java提供的一组接口和类,主要用于创建、序列化和图形化Java对象,也就是所谓的"Beans"。这些Beans可以作为组件在各种环境中重用,如Java应用程序、网页或EJB(Enterprise JavaBeans)等。其中,`...
- **反射机制**:该工具类大量使用了Java反射API(如`Introspector.getBeanInfo()`、`PropertyDescriptor`等)来获取和设置JavaBean的属性。 - **泛型**:使用了泛型`<T>`,使得该工具类可以应用于任意类型的...
- `java.beans`包提供了诸如`PropertyDescriptor`和`BeanInfo`等类,用于获取和设置Java Bean的属性值。 - `org.springframework.beans.BeanUtils`是Spring框架的一部分,提供了更强大和灵活的Bean操作,如复制...
PropertyDescriptor. Not all classes of this package are supported in Android. See javadoc of Android's java.beans package. There is a project called android-logging-log4j, which provides a ...
`javax.bean`子包提供了对JavaBeans的支持,包括`java.beans.Beans`类,用于初始化无参数构造器的bean实例,以及`java.beans.PropertyDescriptor`和`java.beans.EventSetDescriptor`,它们分别用来描述bean的属性和...
在android studio 中无法使用 BeanInfo,IntrospectionException,Introspector, PropertyDescriptor 这些类,只需要导入这个jar 库就可以了。 只不过,要把java.beans.BeanInfo; 替换为 ...
为了更好地理解和使用 Java Beans,你需要熟悉相关的 API,如 `java.beans` 包中的类和接口,例如 `PropertyDescriptor`、`EventSetDescriptor` 和 `Introspector`。同时,了解如何实现事件监听器接口(如 `...
5. **java.beans**:虽然在JSON处理中不常用,但在某些情况下,可能需要将JavaBeans对象转换为JSON,这时`java.beans`包的`PropertyDescriptor`和`BeanInfo`类可能会被用到。 6. **javax.xml.bind**:如果涉及到XML...
在由JDK提供的默认的API中,有java.beans包,里面有诸如Introspector,BeanInfo,PropertyDescriptor等用来操作JavaBean的方法, 但是由Apache公司开发的BeanUtils会更常用,同时,BeanUtils还需要配合第三方日志...
在Java中,Sun公司提供的内省(Introspection)API,如java.beans.PropertyDescriptor和java.beans.Introspector,虽然强大但确实相对复杂,不便于开发者快速访问和修改Bean的属性。BeanUtils库则通过提供一套更直观...
`java.beans`包中的`PropertyDescriptor`、`MethodDescriptor`等类可以帮助我们获取Bean的属性和方法信息,实现对Bean对象的读写操作,这对于构建用户界面和数据绑定场景非常方便。 总的来说,Java反射与内省提供了...
这段代码使用了 `java.beans` 包下的 `Introspector` 类来获取对象的属性信息,并通过反射调用getter方法获取属性值。 ##### 3.3 应用场景 内省的一个常见应用场景是在Web框架中,如Struts中的FormBean。通过内省...
import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.ResultSet; import java.sql....
10. **JavaBeans API**:JavaBeans API包含了一系列的类和接口,如`java.beans.PropertyDescriptor`、`java.beans.EventSetDescriptor`等,它们是实现和使用JavaBeans的基础。 本手册的"JavaBeans开发使用手册"可能...