文章目录
前言
- 新的一年即将来到,回首2023年,也是学习了许多,不断进步。今天带来的是项目中遇到的一个业务要求处理方法总结:项目具有很多的枚举类,而这些枚举类在前端页面中需要作为下拉框选项等组件被前端获取。为了后续获取枚举值更加方便快捷,我们在项目启动的时候将所有Java枚举类用一个hash存入Redis中,在提供一个接口,使得前端可以从Redis获取自己想要的枚举值。下文将讲解实现步骤。
实现项目启动时加载枚举值到Redis
1. 定义EnumInterface接口
- 定义EnumInterface接口,实现该接口的枚举类会在后续被识别,在项目启动时加入redis
public interface EnumInterface { String getCode(); String getDesc(); //枚举类描述 该值后续会与枚举类名拼接 成为Redis hash的key String enumDesc(); }
2. 创建EnumDTO
- 创建EnumDTO,将存放每个枚举类对象,同一个枚举类的所有对象最终会放入同一个列表,作为Redis hash的value。
@Data @ApiModel(value = "EnumDto", description = "【枚举值-枚举值DTO】") public class EnumDto implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "枚举值类型-对应枚举值类名") private String typeEn; @ApiModelProperty(value = "枚举值类型-对应枚举值类名的desc描述信息") private String typeCh = ""; @ApiModelProperty(value = "枚举值类型-对应枚举值的code值") private String code; @ApiModelProperty(value = "枚举值类型-对应枚举值的desc值") private String desc; @ApiModelProperty(value = "枚举值类型-对应枚举实例的名字") private String enumName; }
3. 创建ClassUtils工具类
- 该类提供一个方法,通过Java反射获取某个包中所有的枚举类,将它们存入列表。
@Slf4j public class ClassUtils { //为了方便管理,我们将枚举类放在同一个包下,这里写入自己项目中枚举类所在的包名。 private static final String PACKAGE_NAME = "com.common.base.enums"; public static List<Class<Enum>> getAllEnumClasses() throws ClassNotFoundException, IOException { List<Class<Enum>> list = new ArrayList<>(); for (String className : getClassName(PACKAGE_NAME, true)) { Class<?> clazz = Class.forName(className); if (Enum.class.isAssignableFrom(clazz) && EnumInterface.class.isAssignableFrom(clazz)) { list.add((Class<Enum>) clazz); } } return list; } /** * 获取某包下的所有类 * @param packageName 包名 * @param childPackage 是否遍历子包 */