美文网首页
Java 利用反射与内省组装数据

Java 利用反射与内省组装数据

作者: _npc_ | 来源:发表于2017-10-19 16:12 被阅读0次
  • 首先建立两个bean
    • 实现javabean规范

/**
 * 描述:
 *
 * @author chen_q_i@163.com
 * 2017/10/19 : 9:26.
 * @version : 1.0
 */
public class Girl {



    @PrimaryKey
    private  long id;
    private  String name;
    private Integer age;
    private String address;
    private String tel;
    private long utime;
    private  long ctime;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public long getUtime() {
        return utime;
    }

    public void setUtime(long utime) {
        this.utime = utime;
    }

    public long getCtime() {
        return ctime;
    }

    public void setCtime(long ctime) {
        this.ctime = ctime;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }
}



/**
 * 描述:
 *
 * @author chen_q_i@163.com
 * 2017/10/19 : 10:37.
 * @version : 1.0
 */
public class NewGirl {
    private String name;
    private long utime;
    private  long ctime;
    private long id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getUtime() {
        return utime;
    }

    public void setUtime(long utime) {
        this.utime = utime;
    }

    public long getCtime() {
        return ctime;
    }

    public void setCtime(long ctime) {
        this.ctime = ctime;
    }

    public long getId() {
        return id;
    }

    @Override
    public String toString() {
        return "NewGirl{" +
                "name='" + name + '\'' +
                ", utime=" + utime +
                ", ctime=" + ctime +
                ", id=" + id +
                '}';
    }

    public void setId(long id) {
        this.id = id;
    }
}

工具类


import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;

/**
 * 描述:
 *
 * @author chen_q_i@163.com
 * 2017/10/19 : 15:02.
 * @version : 1.0
 */
public class BuildViewFromEntity {

    public static void main(String[] args) throws IllegalAccessException, IntrospectionException, InvocationTargetException, InstantiationException {

        Girl girl = new Girl();
        girl.setName("111111111111111111111");
        girl.setId(2323L);
        girl.setCtime(System.currentTimeMillis());
        girl.setUtime(System.currentTimeMillis() + 22323333);
        NewGirl newGirl = new NewGirl();
        voUtils(girl, newGirl);
        System.out.println(newGirl);
    }


    public static void voUtils(Object target, Object voObj) throws IntrospectionException, InvocationTargetException, IllegalAccessException, InstantiationException {
        PropertyDescriptor[] pds = Introspector.getBeanInfo(target.getClass()).getPropertyDescriptors();
        PropertyDescriptor[] ps = Introspector.getBeanInfo(voObj.getClass()).getPropertyDescriptors();

        Arrays.stream(pds)
                .filter(pd -> !"class".equals(pd.getName()) && pd.getReadMethod() != null)
                .forEach(pd -> {
                    Object value = null;
                    try {
                        value = pd.getReadMethod().invoke(target);
                    } catch (IllegalAccessException | InvocationTargetException e) {
                        e.printStackTrace();
                    }
                    if (value != null) {
                        System.out.println(value);
                        Object finalValue = value;

                        Arrays.stream(ps)
                                .filter(p -> p.getName().equals(pd.getName()))
                                .forEach(p -> {
                                    try {
                                        p.getWriteMethod().invoke(voObj, finalValue);
                                    } catch (IllegalAccessException | InvocationTargetException e) {
                                        e.printStackTrace();
                                    }
                                });
                    }

                });


    }

}


image.png

相关文章

  • Java 利用反射与内省组装数据

    首先建立两个bean实现javabean规范 工具类

  • Javassist之内省与定制(一)

    CtClass提供了内省的方法。Javassist的内省机制兼容Java的反射API。CtClass提供了getN...

  • Java反射和内省

    反射 反射 (Reflection) ,JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性...

  • 反射与内省

    一 .反射 反射的概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意...

  • Java的反射和内省

    1.反射反射是指在运行过程中,可以获取任意类的属性和方法信息;对于任意对象,都可以获取调用其任意方法;这种动态获取...

  • Java拾遗:006 - Java反射与内省

    反射 Java中提供了一套精心设计的工具集,以便编写能够动态操纵Java代码的程序,这套工具集就是反射(refle...

  • 2 内省

    1、内省(Introspector) — JavaBean内省基于反射实现,主要用于操作JavaBean,通过内省...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • Java内省机制(Introspector)

    内省 通过反射的方式操作 JavaBean 的属性内省基于反射实现,主要用于操作JavaBean,Introspe...

  • Java基础

    一、反射&内省 1、反射 反射会有些许性能消耗,因为它把装载期做的事情搬到了运行期。 2、JavaBean内省 内...

网友评论

      本文标题:Java 利用反射与内省组装数据

      本文链接:https://www.haomeiwen.com/subject/paauuxtx.html