A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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());
        }

}


3 个回复

倒序浏览
学习了……
回复 使用道具 举报
路过,学习下
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马