java反射应用案例

配置类

package reflection.matrix;

/**
 * 配置信息实体
 * @author zql
 * @version 1.0
 * @createTime 2020-01-18 21:09:41
 * @modifyLog 1.0
 */
public class CfgInfoEntity {
    /**
     * 主键
     */
    private String id;
    /**
     * 行名称
     */
    private String rowName;
    /**
     * 行字段
     */
    private String toRowField;
    /**
     * 目标字段英文名
     */
    private String toFieldEn;
    /**
     * 目标字段中文名
     */
    private String toFieldCn;
    /**
     * 目标类
     */
    private String toFieldCls;
    /**
     * 来源字段英文名
     */
    private String refFieldEn;
    /**
     * 来源字段中文名
     */
    private String refFieldCn;
    /**
     * 来源类
     */
    private String refFieldCls;

    public String getId() {
        return this.id;
    }

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

    public String getToRowField() {
        return this.toRowField;
    }

    public void setToRowField(final String toRowField) {
        this.toRowField = toRowField;
    }

    public String getRowName() {
        return this.rowName;
    }

    public void setRowName(final String rowName) {
        this.rowName = rowName;
    }

    public String getToFieldEn() {
        return this.toFieldEn;
    }

    public void setToFieldEn(final String toFieldEn) {
        this.toFieldEn = toFieldEn;
    }

    public String getToFieldCn() {
        return this.toFieldCn;
    }

    public void setToFieldCn(final String toFieldCn) {
        this.toFieldCn = toFieldCn;
    }

    public String getToFieldCls() {
        return this.toFieldCls;
    }

    public void setToFieldCls(final String toFieldCls) {
        this.toFieldCls = toFieldCls;
    }

    public String getRefFieldEn() {
        return this.refFieldEn;
    }

    public void setRefFieldEn(final String refFieldEn) {
        this.refFieldEn = refFieldEn;
    }

    public String getRefFieldCn() {
        return this.refFieldCn;
    }

    public void setRefFieldCn(final String refFieldCn) {
        this.refFieldCn = refFieldCn;
    }

    public String getRefFieldCls() {
        return this.refFieldCls;
    }

    public void setRefFieldCls(final String refFieldCls) {
        this.refFieldCls = refFieldCls;
    }
}

实体类

package reflection.matrix;

/**
 * 营业指标
 * @author zql
 * @version 1.0
 * @createTime 2020-01-18 21:48:25
 * @modifyLog 1.0
 */
public class BusiTarget {

    /**
     * 指标
     */
    private String tar;
    /**
     * 广西
     */
    private String guangxi;
    /**
     * 广东
     */
    private String guangdong;
    /**
     * 湖南
     */
    private String hunan;
    /**
     * 湖北
     */
    private String hubei;

    public String getTar() {
        return this.tar;
    }

    public void setTar(final String tar) {
        this.tar = tar;
    }

    public String getGuangxi() {
        return this.guangxi;
    }

    public void setGuangxi(final String guangxi) {
        this.guangxi = guangxi;
    }

    public String getGuangdong() {
        return this.guangdong;
    }

    public void setGuangdong(final String guangdong) {
        this.guangdong = guangdong;
    }

    public String getHunan() {
        return this.hunan;
    }

    public void setHunan(final String hunan) {
        this.hunan = hunan;
    }

    public String getHubei() {
        return this.hubei;
    }

    public void setHubei(final String hubei) {
        this.hubei = hubei;
    }

    @Override
    public String toString() {
        return "BusiTarget{" +
                "tar='" + tar + '\'' +
                ", guangxi='" + guangxi + '\'' +
                ", guangdong='" + guangdong + '\'' +
                ", hunan='" + hunan + '\'' +
                ", hubei='" + hubei + '\'' +
                '}';
    }
}

package reflection.matrix;

/**
 * 销售指标
 * @author zql
 * @version 1.0
 * @createTime 2020-01-18 21:23:28
 * @modifyLog 1.0
 */
public class SaleTarget {

    /**
     * 指标
     */
    private String tar;
    /**
     * 东区
     */
    private String east;
    /**
     * 西区
     */
    private String west;
    /**
     * 南区
     */
    private String south;
    /**
     * 北区
     */
    private String north;

    public String getTar() {
        return this.tar;
    }

    public void setTar(final String tar) {
        this.tar = tar;
    }

    public String getEast() {
        return this.east;
    }

    public void setEast(final String east) {
        this.east = east;
    }

    public String getWest() {
        return this.west;
    }

    public void setWest(final String west) {
        this.west = west;
    }

    public String getSouth() {
        return this.south;
    }

    public void setSouth(final String south) {
        this.south = south;
    }

    public String getNorth() {
        return this.north;
    }

    public void setNorth(final String north) {
        this.north = north;
    }

    @Override
    public String toString() {
        return "SaleTarget{" +
                "tar='" + tar + '\'' +
                ", east='" + east + '\'' +
                ", west='" + west + '\'' +
                ", south='" + south + '\'' +
                ", north='" + north + '\'' +
                '}';
    }
}

package reflection.matrix;

import java.util.Random;

/**
 * 数据来源
 * @author zql
 * @version 1.0
 * @createTime 2020-01-18 21:28:54
 * @modifyLog 1.0
 */
public class DataFrom {

    /**
     * 东区销售额
     */
    private String dataEastAmt = String.valueOf(new Random().nextInt(10000));
    /**
     * 西区销售额
     */
    private String dataWestAmt = String.valueOf(new Random().nextInt(10000));
    /**
     * 南区销售额
     */
    private String dataSouthAmt = String.valueOf(new Random().nextInt(10000));
    /**
     * 北区销售额
     */
    private String dataNorthAmt = String.valueOf(new Random().nextInt(10000));
    /**
     * 东区销售目标
     */
    private String dataEastTag = String.valueOf(new Random().nextInt(10000));
    /**
     * 西区销售目标
     */
    private String dataWestTag = String.valueOf(new Random().nextInt(10000));
    /**
     * 南区销售目标
     */
    private String dataSouthTag = String.valueOf(new Random().nextInt(10000));
    /**
     * 北区销售目标
     */
    private String dataNorthTag = String.valueOf(new Random().nextInt(10000));
    /**
     * 广西营业额
     */
    private String dataGuangxiAmt = String.valueOf(new Random().nextInt(10000));
    /**
     * 广东营业额
     */
    private String dataGuangdongAmt = String.valueOf(new Random().nextInt(10000));
    /**
     * 湖南营业额
     */
    private String dataHunanAmt = String.valueOf(new Random().nextInt(10000));
    /**
     * 湖北营业额
     */
    private String dataHubeiAmt = String.valueOf(new Random().nextInt(10000));
    /**
     * 广西营业目标
     */
    private String dataGuangxiTag = String.valueOf(new Random().nextInt(10000));
    /**
     * 广东营业目标
     */
    private String dataGuangdongTag = String.valueOf(new Random().nextInt(10000));
    /**
     * 湖南营业目标
     */
    private String dataHunanTag = String.valueOf(new Random().nextInt(10000));
    /**
     * 湖北营业目标
     */
    private String dataHubeiTag = String.valueOf(new Random().nextInt(10000));

    public String getDataEastAmt() {
        return this.dataEastAmt;
    }

    public void setDataEastAmt(final String dataEastAmt) {
        this.dataEastAmt = dataEastAmt;
    }

    public String getDataWestAmt() {
        return this.dataWestAmt;
    }

    public void setDataWestAmt(final String dataWestAmt) {
        this.dataWestAmt = dataWestAmt;
    }

    public String getDataSouthAmt() {
        return this.dataSouthAmt;
    }

    public void setDataSouthAmt(final String dataSouthAmt) {
        this.dataSouthAmt = dataSouthAmt;
    }

    public String getDataNorthAmt() {
        return this.dataNorthAmt;
    }

    public void setDataNorthAmt(final String dataNorthAmt) {
        this.dataNorthAmt = dataNorthAmt;
    }

    public String getDataEastTag() {
        return this.dataEastTag;
    }

    public void setDataEastTag(final String dataEastTag) {
        this.dataEastTag = dataEastTag;
    }

    public String getDataWestTag() {
        return this.dataWestTag;
    }

    public void setDataWestTag(final String dataWestTag) {
        this.dataWestTag = dataWestTag;
    }

    public String getDataSouthTag() {
        return this.dataSouthTag;
    }

    public void setDataSouthTag(final String dataSouthTag) {
        this.dataSouthTag = dataSouthTag;
    }

    public String getDataNorthTag() {
        return this.dataNorthTag;
    }

    public void setDataNorthTag(final String dataNorthTag) {
        this.dataNorthTag = dataNorthTag;
    }

    public String getDataGuangxiAmt() {
        return this.dataGuangxiAmt;
    }

    public void setDataGuangxiAmt(final String dataGuangxiAmt) {
        this.dataGuangxiAmt = dataGuangxiAmt;
    }

    public String getDataGuangdongAmt() {
        return this.dataGuangdongAmt;
    }

    public void setDataGuangdongAmt(final String dataGuangdongAmt) {
        this.dataGuangdongAmt = dataGuangdongAmt;
    }

    public String getDataHunanAmt() {
        return this.dataHunanAmt;
    }

    public void setDataHunanAmt(final String dataHunanAmt) {
        this.dataHunanAmt = dataHunanAmt;
    }

    public String getDataHubeiAmt() {
        return this.dataHubeiAmt;
    }

    public void setDataHubeiAmt(final String dataHubeiAmt) {
        this.dataHubeiAmt = dataHubeiAmt;
    }

    public String getDataGuangxiTag() {
        return this.dataGuangxiTag;
    }

    public void setDataGuangxiTag(final String dataGuangxiTag) {
        this.dataGuangxiTag = dataGuangxiTag;
    }

    public String getDataGuangdongTag() {
        return this.dataGuangdongTag;
    }

    public void setDataGuangdongTag(final String dataGuangdongTag) {
        this.dataGuangdongTag = dataGuangdongTag;
    }

    public String getDataHunanTag() {
        return this.dataHunanTag;
    }

    public void setDataHunanTag(final String dataHunanTag) {
        this.dataHunanTag = dataHunanTag;
    }

    public String getDataHubeiTag() {
        return this.dataHubeiTag;
    }

    public void setDataHubeiTag(final String dataHubeiTag) {
        this.dataHubeiTag = dataHubeiTag;
    }

    @Override
    public String toString() {
        return "DataFrom{" +
                "dataEastAmt='" + dataEastAmt + '\'' +
                ", dataWestAmt='" + dataWestAmt + '\'' +
                ", dataSouthAmt='" + dataSouthAmt + '\'' +
                ", dataNorthAmt='" + dataNorthAmt + '\'' +
                ", dataEastTag='" + dataEastTag + '\'' +
                ", dataWestTag='" + dataWestTag + '\'' +
                ", dataSouthTag='" + dataSouthTag + '\'' +
                ", dataNorthTag='" + dataNorthTag + '\'' +
                ", dataGuangxiAmt='" + dataGuangxiAmt + '\'' +
                ", dataGuangdongAmt='" + dataGuangdongAmt + '\'' +
                ", dataHunanAmt='" + dataHunanAmt + '\'' +
                ", dataHubeiAmt='" + dataHubeiAmt + '\'' +
                ", dataGuangxiTag='" + dataGuangxiTag + '\'' +
                ", dataGuangdongTag='" + dataGuangdongTag + '\'' +
                ", dataHunanTag='" + dataHunanTag + '\'' +
                ", dataHubeiTag='" + dataHubeiTag + '\'' +
                '}';
    }
}

测试类

package reflection;

import org.springframework.util.ReflectionUtils;
import reflection.matrix.BusiTarget;
import reflection.matrix.CfgInfoEntity;
import reflection.matrix.DataFrom;
import reflection.matrix.SaleTarget;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 反射测试
 * @author zql
 * @version 1.0
 * @createTime 2020-01-18 21:05:58
 * @modifyLog 1.0
 */
public class ReflectionTest {

    public static List<CfgInfoEntity> initCfg() {
        List<CfgInfoEntity> list = new ArrayList<>();
        CfgInfoEntity c1 = new CfgInfoEntity();
        c1.setId("1");
        c1.setRowName("销售额");
        c1.setToRowField("Tar");
        c1.setToFieldCn("东区");
        c1.setToFieldEn("East");
        c1.setToFieldCls("reflection.matrix.SaleTarget");
        c1.setRefFieldCn("东区销售额");
        c1.setRefFieldEn("DataEastAmt");
        c1.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c1);

        CfgInfoEntity c2 = new CfgInfoEntity();
        c2.setId("2");
        c2.setRowName("销售额");
        c2.setToRowField("Tar");
        c2.setToFieldCn("西区");
        c2.setToFieldEn("West");
        c2.setToFieldCls("reflection.matrix.SaleTarget");
        c2.setRefFieldCn("西区销售额");
        c2.setRefFieldEn("DataWestAmt");
        c2.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c2);

        CfgInfoEntity c3 = new CfgInfoEntity();
        c3.setId("3");
        c3.setRowName("销售额");
        c3.setToRowField("Tar");
        c3.setToFieldCn("南区");
        c3.setToFieldEn("South");
        c3.setToFieldCls("reflection.matrix.SaleTarget");
        c3.setRefFieldCn("南区销售额");
        c3.setRefFieldEn("DataSouthAmt");
        c3.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c3);

        CfgInfoEntity c4 = new CfgInfoEntity();
        c4.setId("4");
        c4.setRowName("销售额");
        c4.setToRowField("Tar");
        c4.setToFieldCn("北区");
        c4.setToFieldEn("North");
        c4.setToFieldCls("reflection.matrix.SaleTarget");
        c4.setRefFieldCn("北区销售额");
        c4.setRefFieldEn("DataNorthAmt");
        c4.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c4);

        CfgInfoEntity c01 = new CfgInfoEntity();
        c01.setId("5");
        c01.setRowName("销售目标");
        c01.setToRowField("Tar");
        c01.setToFieldCn("东区");
        c01.setToFieldEn("East");
        c01.setToFieldCls("reflection.matrix.SaleTarget");
        c01.setRefFieldCn("东区销售目标");
        c01.setRefFieldEn("DataEastTag");
        c01.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c01);

        CfgInfoEntity c02 = new CfgInfoEntity();
        c02.setId("6");
        c02.setRowName("销售目标");
        c02.setToRowField("Tar");
        c02.setToFieldCn("西区");
        c02.setToFieldEn("West");
        c02.setToFieldCls("reflection.matrix.SaleTarget");
        c02.setRefFieldCn("西区销售目标");
        c02.setRefFieldEn("DataWestTag");
        c02.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c02);

        CfgInfoEntity c03 = new CfgInfoEntity();
        c03.setId("7");
        c03.setRowName("销售目标");
        c03.setToRowField("Tar");
        c03.setToFieldCn("南区");
        c03.setToFieldEn("South");
        c03.setToFieldCls("reflection.matrix.SaleTarget");
        c03.setRefFieldCn("南区销售目标");
        c03.setRefFieldEn("DataSouthTag");
        c03.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c03);

        CfgInfoEntity c04 = new CfgInfoEntity();
        c04.setId("8");
        c04.setRowName("销售目标");
        c04.setToRowField("Tar");
        c04.setToFieldCn("北区");
        c04.setToFieldEn("North");
        c04.setToFieldCls("reflection.matrix.SaleTarget");
        c04.setRefFieldCn("北区销售目标");
        c04.setRefFieldEn("DataNorthTag");
        c04.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c04);

        CfgInfoEntity c11 = new CfgInfoEntity();
        c11.setId("9");
        c11.setRowName("营业目标");
        c11.setToRowField("Tar");
        c11.setToFieldCn("广西");
        c11.setToFieldEn("Guangxi");
        c11.setToFieldCls("reflection.matrix.BusiTarget");
        c11.setRefFieldCn("广西营业目标");
        c11.setRefFieldEn("DataGuangxiTag");
        c11.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c11);

        CfgInfoEntity c12 = new CfgInfoEntity();
        c12.setId("10");
        c12.setRowName("营业目标");
        c12.setToRowField("Tar");
        c12.setToFieldCn("广东");
        c12.setToFieldEn("Guangdong");
        c12.setToFieldCls("reflection.matrix.BusiTarget");
        c12.setRefFieldCn("广东营业目标");
        c12.setRefFieldEn("DataGuangdongTag");
        c12.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c12);

        CfgInfoEntity c13 = new CfgInfoEntity();
        c13.setId("11");
        c13.setRowName("营业目标");
        c13.setToRowField("Tar");
        c13.setToFieldCn("湖南");
        c13.setToFieldEn("Hunan");
        c13.setToFieldCls("reflection.matrix.BusiTarget");
        c13.setRefFieldCn("湖南营业目标");
        c13.setRefFieldEn("DataHunanTag");
        c13.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c13);

        CfgInfoEntity c14 = new CfgInfoEntity();
        c14.setId("12");
        c14.setRowName("营业目标");
        c14.setToRowField("Tar");
        c14.setToFieldCn("湖北");
        c14.setToFieldEn("Hubei");
        c14.setToFieldCls("reflection.matrix.BusiTarget");
        c14.setRefFieldCn("湖北营业目标");
        c14.setRefFieldEn("DataHubeiTag");
        c14.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c14);

        CfgInfoEntity c21 = new CfgInfoEntity();
        c21.setId("13");
        c21.setRowName("营业额");
        c21.setToRowField("Tar");
        c21.setToFieldCn("广西");
        c21.setToFieldEn("Guangxi");
        c21.setToFieldCls("reflection.matrix.BusiTarget");
        c21.setRefFieldCn("广西营业额");
        c21.setRefFieldEn("DataGuangxiAmt");
        c21.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c21);

        CfgInfoEntity c22 = new CfgInfoEntity();
        c22.setId("14");
        c22.setRowName("营业额");
        c22.setToRowField("Tar");
        c22.setToFieldCn("广东");
        c22.setToFieldEn("Guangdong");
        c22.setToFieldCls("reflection.matrix.BusiTarget");
        c22.setRefFieldCn("广东营业额");
        c22.setRefFieldEn("DataGuangdongAmt");
        c22.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c22);

        CfgInfoEntity c23 = new CfgInfoEntity();
        c23.setId("15");
        c23.setRowName("营业额");
        c23.setToRowField("Tar");
        c23.setToFieldCn("湖南");
        c23.setToFieldEn("Hunan");
        c23.setToFieldCls("reflection.matrix.BusiTarget");
        c23.setRefFieldCn("湖南营业额");
        c23.setRefFieldEn("DataHunanAmt");
        c23.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c23);

        CfgInfoEntity c24 = new CfgInfoEntity();
        c24.setId("16");
        c24.setRowName("营业额");
        c24.setToRowField("Tar");
        c24.setToFieldCn("湖北");
        c24.setToFieldEn("Hubei");
        c24.setToFieldCls("reflection.matrix.BusiTarget");
        c24.setRefFieldCn("湖北营业额");
        c24.setRefFieldEn("DataHubeiAmt");
        c24.setRefFieldCls("reflection.matrix.DataFrom");
        list.add(c24);
        return list;
    }

    public static Map<String, List<Object>> setData() {
        Map<String, List<Object>> r = new HashMap<String, List<Object>>();
        List<CfgInfoEntity> cfgInfoEntityList = initCfg();
        DataFrom from = new DataFrom();
        System.out.println(from.toString());
        try {
            Map<String, Object> map = new HashMap<String, Object>();
            // 循环处理配置信息
            for (CfgInfoEntity cfg: cfgInfoEntityList) {
                Method fromGetMethod = ReflectionUtils.findMethod(DataFrom.class, "get" + cfg.getRefFieldEn());
                Object fromValue = null;
                if (fromGetMethod != null) {
                    fromValue = ReflectionUtils.invokeMethod(fromGetMethod, from);
                }
                Class toCls = Class.forName(cfg.getToFieldCls());
                String key = cfg.getRowName() + "_" + cfg.getToFieldCls();
                Object obj = map.get(key);
                if (obj == null) {
                    // 实例化
                    obj = toCls.newInstance();
                    // 初始化时设置首列
                    Method toSetRowMethod = ReflectionUtils.findMethod(toCls, "set" + cfg.getToRowField(), String.class);
                    if (toSetRowMethod != null) {
                        toSetRowMethod.invoke(obj, cfg.getRowName());
                    }
                }
                Method toSetMethod = ReflectionUtils.findMethod(toCls, "set" + cfg.getToFieldEn(), String.class);
                if (toSetMethod != null) {
                    toSetMethod.invoke(obj, fromValue);
                }
                map.put(key, obj);
            }
            for (Map.Entry<String, Object> m : map.entrySet()) {
                String[] s = m.getKey().split("_");
                List<Object> list = r.get(s[1]);
                if (list == null) {
                    list = new ArrayList<>();
                }
                list.add(m.getValue());
                r.put(s[1], list);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
        return r;
    }

    public static void main(String[] args) {
        Map<String, List<Object>> r = setData();
        List<Object> busiTargetObjList = r.get("reflection.matrix.BusiTarget");
        List<BusiTarget> busiTargetList = new ArrayList<>(busiTargetObjList.size());
        for (Object obj: busiTargetObjList) {
            BusiTarget b = (BusiTarget) obj;
            busiTargetList.add(b);
            System.out.println(b.toString());
        }
        List<Object> saleTargetObjList = r.get("reflection.matrix.SaleTarget");
        List<SaleTarget> saleTargetList = new ArrayList<>(saleTargetObjList.size());
        for (Object obj: saleTargetObjList) {
            SaleTarget s = (SaleTarget) obj;
            saleTargetList.add(s);
            System.out.println(s.toString());
        }
        System.out.println(busiTargetList.size());
        System.out.println(saleTargetList.size());
    }

}

普通项目需要引入的包
spring-core-4.3.9.RELEASE.jar

maven项目依赖:

<dependency>  
      <groupId>org.springframework</groupId>  
      <artifactId>spring-core</artifactId>  
      <version>4.3.9.RELEASE</version>  
    </dependency>
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值