尝试为大量 DTO 编织默认的 toString() 方法,仅使用编译时编织。目标是使用 Jackson 库返回 JSON 表示。
按照这篇文章的建议,把它变成了注解风格的切面配置,最后得到如下代码:
public @Aspect class JsonToStringAspect {
private interface JsonToString {
public String toString();
}
public static class JsonToStringImpl implements JsonToString {
public String toString() {
return SingletonJsonEncoder.toJsonString(this);
}
}
@SuppressWarnings("unused")
@DeclareParents(value = "com.mycompany.dto..*", defaultImpl = JsonToStringImpl.class)
private JsonToString implementedInterface;
}
在生成的类上运行javap
表明它们实现了 JsonToString 接口,但在任何地方都没有 toString() 方法的迹象。
如果我将方法名称更改为不与 Object.toString() 冲突的名称(例如 toString2()),则真正添加了该方法。
关于如何克服这个问题的任何线索?也许一个@Around
关于拦截 java.lang.Object.toString() 执行的切入点的建议,仅适用于 package 下的子类com.mycompany.dto
?还是一种强制混合发生的方法?