JavaPoet: 1.5.1版
JDK: 1.7
我使用注释来生成代码。这是我正在尝试的东西。
以下是该项目的一部分:
@GenService
public abstract class BaseService {
...
}
@GenController
public abstract class BaseController {
...
}下面是打算通过上面的注释创建的:
public class AService extends BaseService {
...
}
public class AController extends BaseController {
@Autowired
private AService aService;
...
}直到编译后的AService和AController不存在。
我可以包括@Autowired注释。但是,如何在AService中引用AController类型?
发布于 2016-03-29 09:38:10
虽然不是直接的,但我通过汉尼斯·多夫曼的博客找到了答案:
注释处理101
解决方案如下:
...
FieldSpec.Builder fsBuilder;
try {
ClassName clazz = ClassName.get("package.to.services", "AService");
fsBuilder = FieldSpec.builder(clazz, "aService")
.addModifiers(Modifier.PRIVATE)
.addAnnotation(autowired.build());
} catch (MirroredTypeException mte) {
DeclaredType classTypeMirror = (DeclaredType) mte.getTypeMirror();
fsBuilder = FieldSpec.builder(TypeName.get(classTypeMirror), "aService")
.addModifiers(Modifier.PRIVATE)
.addAnnotation(autowired.build());
}
typeBuilder.addField(fsBuilder.build());啊,真灵。但是,如果有更好的方法,请告诉我。
https://stackoverflow.com/questions/36279203
复制相似问题