/**
* 设置ExcelProperty注解对应的value
*
* @param properties 属性字段和注解属性字段值 键值对
* @tClass 泛型 那个类
*/
public static <T> void setHeaderValue(Properties properties,Class<?> tClass) {
Assert.notNull(properties, "properties file must mot be null");
if (properties.size() == 0) {
return;
}
Set<Map.Entry<Object, Object>> entries = properties.entrySet();
entries.forEach(entry -> {
try {
//属性名
String key = String.valueOf(entry.getKey());
if (StringUtils.isBlank(key)) {
return;
}
//属性值
String value = String.valueOf(entry.getValue());
if (StringUtils.isBlank(value)) {
return;
}
//反射找到字段
Field displayName = tClass.getDeclaredField(key);
//获取字段上的注解
ExcelProperty annotation = displayName.getAnnotation(ExcelProperty.class);
InvocationHandler h = Proxy.getInvocationHandler(annotation);
// 获取 AnnotationInvocationHandler 的 memberValues 字段
Field hField;
hField = h.getClass().getDeclaredField("memberValues");
// 因为这个字段是 private final 修饰,所以要打开权限
hField.setAccessible(true);
// 获取 memberValues
Map memberValues = (Map) hField.get(h);
// 修改 value 属性值
memberValues.put("value", value.split(","));
} catch (Exception e) {
log.error("设置ExcelProperty对应value属性失败", e);
}
});
}
Java反射替换属性字段上注解属性对应的值
猜你喜欢
转载自blog.csdn.net/niugang0920/article/details/110531039
今日推荐
周排行