【问题标题】:Javapoet: Referencing other generated classesJavapoet:引用其他生成的类
【发布时间】:2016-07-16 16:59:03
【问题描述】:

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 中的类型?

【问题讨论】:

    标签: java code-generation javapoet


    【解决方案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());
    

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

    【讨论】:

    • 谢谢!有一个类似的问题和 ClassName.get("package.to.services", "AService");对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 2018-02-14
    • 2020-06-25
    相关资源
    最近更新 更多