Javapoet:引用其他生成的类

时间:2016-03-29 08:32:08

标签: java code-generation javapoet

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;
   ...
}

在编译AServiceAController之前不存在。

我可以添加@Autowired注释。但是,如何在AService中引用AController作为类型?

1 个答案:

答案 0 :(得分:1)

虽然不直接,但我通过Hannes Dorfmann的博客找到答案:

Annotation Processing 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());

有效。但是,如果有更好的方法,请告诉我。