枚舉緩存策略的實現與應用
通過靜態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 { ... }
此種方式并不是通過數據庫作為數據字典存儲,是小項目中的枚舉實現,還可以達到字典的效果