Beans类 此类提供一些通用的 bean 控制方法。
静态方法Beans.instantiate(ClassLoader cls, String beanName, BeanContext beanContext) 实例化 JavaBean。
cls - 应该在其中创建 bean 的类加载器。如果该参数为 null,则使用系统类加载器。
beanName - 类加载器中 bean 的名称。例如 "sun.beanbox.foobah"
类 Introspector 内省
Introspector 类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。
对于这三种信息,Introspector 将分别分析 bean 的类和超类,寻找显式或隐式信息,使用这些信息构建一个全面描述目标 bean 的 BeanInfo 对象。
获取一个javabean类的BeanInfo类信息。
BeanInfo BeanInfo = Introspector.getBeanInfo( javabean.Class) 在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件。
BeanInfo类
获取一个Bean的信息,可以调用方法获取属性和方法的信息
PropertyDescriptor[] getPropertyDescriptors() 获得 beans PropertyDescriptor。 获取属性集合
MethodDescriptor[] getMethodDescriptors() 获得 beans MethodDescriptor。 获取方法集合
PropertyDescriptor类 描述 Java Bean 通过一对存储器方法导出的一个属性。
通过获取属性的存储器,获取属性类型,获取属性对应的set、get方法,调用属性对应的方法或方法对应的方法设置值。
equals(Object obj) 将此 PropertyDescriptor 与指定对象进行比较。
属性类型的class getPropertyType() 获得属性的 Class 对象。
Method getReadMethod() 获得应该用于读取属性值的方法。
Method getWriteMethod() 获得应该用于写入属性值的方法。
==================实例演示====================
/*
* 8、 存在一个JavaBean,它包含以下几种可能的属性:
*
* 1:boolean/Boolean
* 2:int/Integer
* 3:String
* 4:double/Double
* 属性名未知,现在要给这些属性设置默认值,以下是要求的默认值:
* String类型的默认值为字符串 www.itheima.com
* int/Integer类型的默认值为100
* boolean/Boolean类型的默认值为true
* double/Double的默认值为0.01D.
* 只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现
*
*
*/
public class Test8 {
public static void main(String[] args) throws Exception {
// 获取类文件
Class clazz = JavaBean.class;
// 创建 对象
JavaBean person = (JavaBean) clazz.newInstance();
// 获取更改默认属性值
// 获取BeanInfo对象
BeanInfo binfo = Introspector.getBeanInfo(clazz);
// 获取BeanInfo属性信息数组
PropertyDescriptor[] proptype = binfo.getPropertyDescriptors();
// 便利
for (PropertyDescriptor pd : proptype) {
// 判断每一个属性,然后设置默认值
if (pd.getPropertyType() == boolean.class || pd.getPropertyType() == Boolean.class) {
pd.getWriteMethod().invoke(person, true);
} else if (pd.getPropertyType() == int.class || pd.getPropertyType() == Integer.class) {
pd.getWriteMethod().invoke(person, 100);
} else if (pd.getPropertyType() == String.class) {
pd.getWriteMethod().invoke(person, "www.itheima.com");
} else if (pd.getPropertyType() == double.class || pd.getPropertyType() == Double.class) {
pd.getWriteMethod().invoke(person, 0.01D);
}
}
//打印结果
System.out.print(person.getName() + " " + person.getAge() + " "
+ person.getResults() + " " + person.isFlag());
}
}
|
|