java利用反射機制獲取實體類屬性自定義註解說明
阿新 • • 發佈:2019-01-09
最近做專案,需要利用java反射機制,獲取實體類自定義註解的說明資訊
1.自定義註解
2.解析自定義註解的工具類<strong>package com.bjhy.platform.criminal.search.core.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * @Description 用於配置實體類欄位說明資訊 * @author wangbowen * @date 2015年12月14日 */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ColumnConfig { /** * 欄位的中文名 * @return */ String description() default ""; } </strong>
<strong>package com.bjhy.platform.criminal.search.core.tool; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import com.bjhy.platform.criminal.search.core.annotation.ColumnConfig; /*** * 獲取屬性與對應的中文名工具類 * @author wangbowen * @date 2015-12-14 * @version 1.0 * */ public class FieldHelper { /** * 根據實體類名獲取欄位名稱和中文名稱 * @param entityName 實體類名 * @return List<Map<String,Object>> */ public static List<LinkedHashMap<String,Object>> initAnnoFieldDic(@SuppressWarnings("rawtypes") Class clzz){ //用於儲存欄位和中文值的集合 List<LinkedHashMap<String,Object>> fieldList = new ArrayList<>(); //用於儲存實體類欄位(key)和中文名(value) LinkedHashMap<String,Object> valueMap = new LinkedHashMap<>(); //獲取物件中所有的Field Field[] fields = clzz.getDeclaredFields(); //迴圈實體類欄位集合,獲取標註@ColumnConfig的欄位 for (Field field : fields) { if(field.isAnnotationPresent(ColumnConfig.class)){ //獲取欄位名 String fieldNames = clzz.getSimpleName()+"."+field.getName(); //獲取欄位註解 ColumnConfig columnConfig = field.getAnnotation(ColumnConfig.class); //判斷是否已經獲取過該code的字典資料 避免重複獲取 if(valueMap.get(columnConfig.description())==null){ valueMap.put(fieldNames, columnConfig.description()); } } } fieldList.add(valueMap);//將LinkedHashMap放入List集合中 return fieldList; } } </strong>