1

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ですか?

4

1 に答える 1

2

直接的ではありませんが、Hannes Dorfmann のブログで答えを見つけました。

アノテーション処理 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());

出来た。でも、もっといい方法があれば教えてください。

于 2016-03-29T09:38:10.587 に答える