zoukankan      html  css  js  c++  java
  • javabeans 内省 introspector BeanUtils

    javaBeans 属性的概念

    不只是字段,而是其get set 方法

    且该get方法有返回值的称为属性,继承Object类的getClass方法

    package com.swift.demo1;
    
    public class Person {
        String name;
        int age;
        String password;
        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 String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getAd() {//这个算一个属性,虽让没有字段,但如果没有返回值不算一个属性
            return "getAd.....";
        }
    }

    属性个数

    package com.swift.demo1;
    
    import java.beans.BeanInfo;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    
    import org.junit.jupiter.api.Test;
    
    public class TestIntro {
        @Test
        public void test1() throws Exception {
            BeanInfo info=Introspector.getBeanInfo(Person.class);
            PropertyDescriptor[] pds=info.getPropertyDescriptors();
            for(PropertyDescriptor des:pds) {
                System.out.println(des.getName());
            }
        }
    }

    阻止父类的getClass属性用

    package com.swift.demo1;
    
    import java.beans.BeanInfo;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    
    import org.junit.jupiter.api.Test;
    
    public class TestIntro {
        @Test
        public void test1() throws Exception {
            BeanInfo info=Introspector.getBeanInfo(Person.class,Object.class);
            PropertyDescriptor[] pds=info.getPropertyDescriptors();
            for(PropertyDescriptor des:pds) {
                System.out.println(des.getName());
            }
        }
    }

    BeanUtils使用jar包

    需要两个:

    都可以在Apache网站下载

    BeanUtils具有比Introspector更强大的功能,可以在基本数据类型间直接转换,也可以把文本框中的字符串通过注册器转换器进行转换

    自己转日期格式

    package com.swift.demo1;
    
    import java.lang.reflect.InvocationTargetException;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.commons.beanutils.ConvertUtils;
    import org.apache.commons.beanutils.Converter;
    import org.junit.Test;
    
    public class TestUtils {
        @Test
        public void test() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
            
            Person p=new Person();
            
            ConvertUtils.register(new Converter() {
    
                @Override
                public Object convert(Class type, Object value) {
                    String str=(String) value;
                    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
                    try {
                        return sdf.parse(str);
                    } catch (ParseException e) {
                        throw new RuntimeException(e);//
                    }
                }
            }, Date.class);
            
            BeanUtils.setProperty(p, "name", "swift");
            BeanUtils.setProperty(p, "age", "30");
            BeanUtils.setProperty(p, "password", "123");
            BeanUtils.setProperty(p, "date", "2018-02-19");
            
            System.out.println(p.getName());
            System.out.println(BeanUtils.getProperty(p, "name"));
            System.out.println(BeanUtils.getProperty(p, "age"));
            System.out.println(BeanUtils.getProperty(p, "password"));
            System.out.println(BeanUtils.getProperty(p, "date"));
        }
    }

    可以用现成的

    package com.swift.demo1;
    
    import java.lang.reflect.InvocationTargetException;
    import java.util.Date;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.commons.beanutils.ConvertUtils;
    import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
    import org.junit.Test;
    
    public class TestUtils {
        @Test
        public void test() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
            
            Person p=new Person();
            
            ConvertUtils.register(new DateLocaleConverter(),Date.class);
            
            BeanUtils.setProperty(p, "name", "swift");
            BeanUtils.setProperty(p, "age", "30");
            BeanUtils.setProperty(p, "password", "123");
            BeanUtils.setProperty(p, "date", "2018-02-19");
            
            System.out.println(p.getName());
            System.out.println(BeanUtils.getProperty(p, "name"));
            System.out.println(BeanUtils.getProperty(p, "age"));
            System.out.println(BeanUtils.getProperty(p, "password"));
            System.out.println(BeanUtils.getProperty(p, "date"));
        }
    }

    集合map加到BeanUtils

    package com.swift.demo1;
    
    import java.lang.reflect.InvocationTargetException;
    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;
    import org.junit.Test;
    
    public class TestUtils {
        @Test
        public void test() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
            
            Person p=new Person();
            
            ConvertUtils.register(new DateLocaleConverter(),Date.class);
            
            BeanUtils.setProperty(p, "name", "swift");
            BeanUtils.setProperty(p, "age", "30");
            BeanUtils.setProperty(p, "password", "123");
            BeanUtils.setProperty(p, "date", "2018-02-19");
            
            System.out.println(p.getName());
            System.out.println(BeanUtils.getProperty(p, "name"));
            System.out.println(BeanUtils.getProperty(p, "age"));
            System.out.println(BeanUtils.getProperty(p, "password"));
            System.out.println(BeanUtils.getProperty(p, "date"));
        }
        
        @Test
        public void test1() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
            
            Person p=new Person();
            
            ConvertUtils.register(new DateLocaleConverter(),Date.class);
            
            Map<String, String> map=new HashMap<String, String>();
            map.put("name", "swift");
            map.put("age", "30");
            map.put("password", "123");
            map.put("date", "2018-02-19");
            
            BeanUtils.populate(p, map);
            
            System.out.println(p.getName());
            System.out.println(BeanUtils.getProperty(p, "name"));
            System.out.println(BeanUtils.getProperty(p, "age"));
            System.out.println(BeanUtils.getProperty(p, "password"));
            System.out.println(BeanUtils.getProperty(p, "date"));
        }
    }
  • 相关阅读:
    良好的三元组(求已排列好的数组中各个元素的排位)
    山理工oj 2556传说中的数据结构
    山理oj 1177 时间间隔
    山理oj1525:字符统计2
    linux常用命令
    多线程并发教程
    合理设置线程数量
    Java多线程处理任务(摘抄)
    解决2013Lost connection to MySQL server during query错误方法
    javaMail邮件发送
  • 原文地址:https://www.cnblogs.com/qingyundian/p/8453684.html
Copyright © 2011-2022 走看看