配置类
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>