我正在创建 springboot 应用程序,并且大多数时候我发现自己在为我的模型编写样板代码——存储库、服务、控制器、构建器......我不想这样做。
根据我的经验、以前的工作和研究,我在脑海中形成了一个概念。基本上如下:
- 我创建一个注释
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface CodeGenSubject {
}
- 我创建了一个处理器
public class MyProcessor extends AbstractProcessor {
@Override
public Set<String> getSupportedAnnotationTypes() {
return Collections.singleton(CodeGenSubject.class.getCanonicalName());
}
@Override
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
for(Element e: roundEnvironment.getElementsAnnotatedWith(CodeGenSubject.class)){
// Observe fields and methods with reflection API
// "Write" some code with JavaPoet
// Place the generated code to the src/java folder
// (with javax.annotation.processing.Filer)
}
}
}
- 我写我的领域特定类
@CodeGenSubject
@Entity
public class MyDomainSpecificEntity {
@Id
private Long id;
private String stuff;
// getters and setters
}
- 最后,我创建了一个 gradle 任务(?)
task myCodeGeneratorTask(type: ???, group: "", desription: "") {
// With this I am stuck
}
理想情况下,此模板生成器将是一个单独的模块。
我看过一些示例项目(主要是针对 android 的),然后我发现了最有前途的:
https://www.baeldung.com/java-annotation-processing-builder
会很完美,但是......它使用 maven,并且代码被放置在一个完全无法穿透的存储库中,根项目中有一个 pom.xml 文件,有几千行。感谢:D
现在我正在开发一个带有 springboot 应用程序的示例多模块 gradle 项目。我有一个实体(MyDomainSpecificEntity),我试图让 gradle 根据我的注释和处理器为我生成一些源代码。
首先,如果我在概念上是错误的,最大的帮助将是一些建议。
其次,如果我不是,我将不胜感激该 gradle 脚本的一些帮助。
最后......最好是一个干净的示例项目,如果有人曾经玩过这个主题,并且有某种公共回购,那将是最受欢迎的。
谢谢。