Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javapoet:引用其他生成的类_Java_Code Generation_Javapoet - Fatal编程技术网

Javapoet:引用其他生成的类

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

JavaPoter: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;
   ...
}
在编译之前,
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”);他为我做了这件事。