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"));
    }
}
原文地址:https://www.cnblogs.com/qingyundian/p/8453684.html