2016-03-29 10 views
0

JavaPoet:バージョン1.5.1Javapoet:他の生成されたクラスを参照

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注釈を含めることができます。しかし、AControllerのタイプとしてAServiceをどのように参照すればよいですか?

答えて

0

指示していないが、私はハンネス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()); 

それは働きました。しかし、もっと良い方法があれば教えてください。

関連する問題