zoukankan      html  css  js  c++  java
  • Java中的内省(introspector)

    1. JavaBean (有get/set属性,和默认构造器等规范的java类)

    import java.util.Date;
    
    public class Student {
        // 这是 字段
        private String name;
        private int age;
        private Date birthday;
    
        // 这是 属性 
        //(get、set开头的方法,getName、setName算一个属性,单独一个set或get也算一个属性)
        // 属性名为 去掉get、set后  第一个大写字母变小写字母。
        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;
        }
        
        public int getAbc(){ //注意这也是一个属性,属性名为 abc
            return 10;
        }
        /*
        public int getefg(){ //注意这也是一个属性,属性名为 efg
            return 10;
        }*/
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
    }

    测试

    import java.beans.BeanInfo;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.Method;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.commons.beanutils.ConvertUtils;
    import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
    
    public class Test1 {
        public static void main(String[] args) throws Exception {
            test05();
        }
    
        // 获取属性描述器  Introspector.getBeanInfo(Student.class).getPropertyDescriptors();
        private static void test01() throws Exception {
            BeanInfo bf = Introspector.getBeanInfo(Student.class);
            PropertyDescriptor[] pds = bf.getPropertyDescriptors();
            for (PropertyDescriptor pd : pds) {
                System.out.println(pd.getName());
            }
            /*
                abc
                age
                class //这个是Object类里的
                name
             */
        }
        
        // 使用内省 调用set、get方法
        private static void test02() throws Exception {
            Student stu = new Student();
            PropertyDescriptor pd = new PropertyDescriptor("name", Student.class);
            Method setter = pd.getWriteMethod();
            setter.invoke(stu, "tom");
            Method getter = pd.getReadMethod();
            System.out.println(getter.invoke(stu));
        }
        
        
        /**
         * 以上使用的 java源码里的 java.beans包
         * 接下来有更方便的,Apache 组织提供的  commons-beanutils-1.8.3.jar 
         * 导入:commons-beanutils-1.8.3.jar  commons-logging-1.1.1.jar
         */
        private static void test03() throws Exception{
            Student stu = new Student();
            BeanUtils.setProperty(stu, "name", "白居易");
            System.out.println(stu.getName());
            String name = BeanUtils.getProperty(stu, "name");
            System.out.println(name);
            //BeanUtils 支持8中基本类型 自动转换
            BeanUtils.setProperty(stu, "age", 19);
            BeanUtils.setProperty(stu, "age", "18");
            System.out.println(stu.getAge());
            //PropertyUtils.setSimpleProperty(stu, name, value);
        }
        
        private static void test04() throws Exception{
            Student stu = new Student();
            //set/get 日期 Date
            ConvertUtils.register(new DateLocaleConverter(), Date.class);
            BeanUtils.setProperty(stu, "birthday", "1999-11-10");
            System.out.println(stu.getBirthday());
            String s = BeanUtils.getProperty(stu, "birthday");
            System.out.println(s);
        }
        
        /**
         * 一下整个赋值给 javaBean 对象,使用 BeanUtils.populate
         * @throws Exception
         */
        private static void test05() throws Exception{
            Student stu = new Student();
            Map m = new HashMap();
            m.put("name", "Lee");//注意:key名一定要与对象中的变量名一致
            m.put("age", "18");//注意:key名一定要与对象中的变量名一致
            m.put("birthday", "2020-7-4");//注意:key名一定要与对象中的变量名一致
            
            ConvertUtils.register(new DateLocaleConverter(), Date.class);
            BeanUtils.populate(stu, m);
            System.out.println(stu.getBirthday());
            
        }
    }

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    oracle报ORA-00911:invalid character
    转: ㊣华哥日记㊣ 12.14-如何去了解更多的东西
    App竞品技术分析 (3)减小安装包的体积(转)
    ***apache做301重定向的方法
    .htaccess是什么?.htaccess几个简单应用
    一个网页如何决定是当前页打开还是新窗口打开?
    响应式web设计之CSS3 Media Queries
    ***CSS魔法堂:选择器及其优先级
    Bootstrap3 为何无法显示Glyphicons 图标
    MySQL中tinytext、text、mediumtext和longtext详解
  • 原文地址:https://www.cnblogs.com/htj10/p/13234444.html
Copyright © 2011-2022 走看看