字典注解
类注解
import lombok.NonNull;
import java.lang.annotation.*;
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DictClass {
String dictJsonFile() default "dict";
@NonNull
String dictKey();
}
属性注解
import lombok.NonNull;
import java.lang.annotation.*;
@Target({
ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DictField {
String cssClass() default "";
@NonNull
String dictLabelZH();
@NonNull
String dictLabelEN();
}
属性拓展注解
import lombok.NonNull;
import java.lang.annotation.*;
@Target({
ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DictFieldEx {
@NonNull
String[] propKey();
@NonNull
String[] propValue();
}
工具类
import com.paratera.console.dict.annotation.DictClass;
import com.paratera.console.dict.annotation.DictField;
import com.paratera.console.dict.annotation.DictFieldEx;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.util.StringUtils;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
public class DictUtils {
private static ConcurrentHashMap<String, String> dictMap = new ConcurrentHashMap<String, String>();
private static String SPACE1 = " ";
private static String SPACE2 = " ";
private static String SPACE3 = " ";
private static String constansFilePath = "classpath:com/paratera/console/dict/constants/*.class";
private static String constansClassPrefix = "com.paratera.console.dict.constants.";
private static String jsonDirUrl = DictUtils.class.getResource("/").getPath() + "dict/";
public static void initDictMapCache() throws IOException, ClassNotFoundException, NoSuchMethodException,
IllegalAccessException, InvocationTargetException, InstantiationException {
PathMatchingResourcePatternResolver util = new PathMatchingResourcePatternResolver();
Resource[] files = util.getResources(constansFilePath);
for (Resource resource : files) {
String className = constansClassPrefix
+ resource.getFilename