1、类注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CodeAnnotation {
}
2、字段注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CodeAnnotationProperties {
String codeKeyProperties();
String codeType();
}
3、Aspectj
@Aspect
@Component
public class CodeAspect {
@Autowired
private CodeTableService codeTableService;
@AfterReturning(value = "execution(* com.lujie.source.mode..mapper.*.*(..)) || execution(* com.lujie.common.dao.BaseMapper.*(..))", returning = "res")
public void serviceReturn(JoinPoint joinPoint, Object res) throws Exception {
if (ObjectUtil.isEmpty(res)) {
return;
}
Boolean isList = res instanceof List ? true : false;
Object obj = isList ? ((List<?>) res).get(0) : res;
Class objClass = obj.getClass();
Annotation[] allAnnos = objClass.getAnnotations();
if (Arrays.stream(allAnnos).anyMatch(i -> i.annotationType() == CodeAnnotation.class)) {
Field[] fields = objClass.getDeclaredFields();
for (Field field : fields) {
if (Arrays.stream(field.getAnnotations()).anyMatch(i -> i.annotationType() == CodeAnnotationProperties.class)) {
CodeAnnotationProperties codeAnnotationProperties = field.getAnnotation(CodeAnnotationProperties.class);
String codeType = codeAnnotationProperties.codeType();
List<CodeTable> codeTableList = codeTableService.findByType(codeType);
if (isList) {
for (Object sub : (List) res) {
setValue(fields, field, sub, codeTableList);
}
} else {
setValue(fields, field, res, codeTableList);
}
}
}
}
}
public void setValue(Field[] fields, Field field, Object sub, List<CodeTable> codeTableList) throws Exception {
CodeAnnotationProperties codeAnnotationProperties = field.getAnnotation(CodeAnnotationProperties.class);
String codeKeyProperties = codeAnnotationProperties.codeKeyProperties();
for (Field field2 : fields) {
if (field2.getName().equals(codeKeyProperties)) {
field2.setAccessible(true);
Object obj2 = field2.get(sub);
CodeTable codeTable = codeTableList.stream().filter(i -> i.getCodeKey().equals(String.valueOf(obj2))).findFirst().orElse(null);
field.setAccessible(true);
field.set(sub, (ObjectUtil.isNotEmpty(codeTable) ? codeTable.getCodeName() : null));
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了