Javapoet:引用其他生成的类
JavaPoter:1.5.1版 JDK:1.7 我正在使用注释生成代码。这是我正在尝试的东西 以下是项目的一部分:Javapoet:引用其他生成的类,java,code-generation,javapoet,Java,Code Generation,Javapoet,JavaPoter:1.5.1版 JDK:1.7 我正在使用注释生成代码。这是我正在尝试的东西 以下是项目的一部分: @GenService public abstract class BaseService { ... } @GenController public abstract class BaseController { ... } 以下是通过上述注释创建的: public class AService extends BaseService { ... } p
@GenService
public abstract class BaseService {
...
}
@GenController
public abstract class BaseController {
...
}
以下是通过上述注释创建的:
public class AService extends BaseService {
...
}
public class AController extends BaseController {
@Autowired
private AService aService;
...
}
在编译之前,a服务
和a控制器
不存在
我可以包括
@Autowired
注释。但是,我如何将a服务
作为a控制器
中的一种类型引用?虽然不是直接的,但我通过Hannes Dorfmann的博客找到了答案:
解决方案如下:
...
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());
成功了。但是,如果有更好的办法,请务必告诉我。谢谢!有一个相似的问题和类名.get(“package.to.services”,“AService”);他为我做了这件事。