枚举缓存策略的实现与应用
通过静态Map缓存枚举类的Class对象,避免每次请求时重复反射加载。核心实现是一个包含枚举类名与对应Class映射的Registry类:
public class EnumRegistry {private static final Map<String, Class<?>> ENUM_MAP = new HashMap<>();static {ENUM_MAP.put("pptStyle", Constant.PPTStyle.class);ENUM_MAP.put("menuInfo", Constant.MenuInfo.class);ENUM_MAP.put("clientType", Constant.ClientType.class);}public static Class<?> getEnumClass(String enumClassName) {return ENUM_MAP.get(enumClassName);}
}
控制器层调用方式
Spring Boot控制器通过参数接收枚举类名,返回对应枚举常量数组。使用@Schema
注解增强Swagger文档说明:
@GetMapping("")
public R getEnum(@RequestParam @Schema(description = "枚举类名:pptStyle,menuInfo,clientType") String enumClassName) {return R.ok(EnumRegistry.getEnumClass(enumClassName).getEnumConstants());
}
枚举类规范设计
推荐枚举类采用以下标准结构:
- 使用Lombok简化代码(
@Getter
+@AllArgsConstructor
) - 通过
@JsonFormat
指定JSON序列化格式为对象形式 - 包含code/name等标准字段,必要时可扩展desc等字段
@Getter
@AllArgsConstructor
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum PPTStyle {DRAFT("JY", "简约"),CLASSIC("SW", "商务"),TECHNOLOGY("KJ", "科技"),ART("QX", "插画"),GOVERNMENT("ZY", "政务"),SCATTER("LD", "弥散"),TREND("CL", "潮流");private final String code;private final String name;
}
扩展优化建议
采用接口统一枚举行为可增强规范性:
public interface BaseEnum {String getCode();String getName();
}public enum PPTStyle implements BaseEnum { ... }
此种方式并不是通过数据库作为数据字典存储,是小项目中的枚举实现,还可以达到字典的效果