【发布时间】:2019-07-20 19:41:46
【问题描述】:
我使用以下命令创建了一个 micronaut 项目
mn create-cli-app micronaut-cli
在项目中,我创建了一个 @Singleton 类并将其注入到我的 Command 类中,但由于对象始终为空,因此注入不起作用。
我的单例类:
@Singleton
public class ConverterService {
public String service(){return "good service";}
}
我的命令类:
@Command(name = "mini-java-util", description = "...",
mixinStandardHelpOptions = true)
public class MiniJavaUtilCommand implements Runnable {
@Inject ConverterService converterService;
@Option(names = {"-v", "--verbose"}, description = "...")
boolean verbose;
public static void main(String[] args) throws Exception {
PicocliRunner.run(MiniJavaUtilCommand.class, args);
}
public void run() {
// business logic here
if (verbose) {
System.out.println("converterService :" + converterService);
}
}
}
当我运行这个课程时,我得到:
converterService :null
请帮助我为什么依赖注入不起作用。
【问题讨论】:
-
我对 Micronaut 不是很熟悉,但是 Spring 支持构造函数注入,这有助于防止出现此类问题。我建议先尝试一下。
-
请在 Micronaut GitHub 问题跟踪器上为此提出票证。还有一些用于 Micronaut 的 Gitter 频道(不确定该使用哪一个),人们通常反应很快。
-
添加一些版本信息(Micronaut 版本、picocli 版本、Java 版本)可能会有用。
-
@chrylis 这与基于构造函数的注入与基于字段的注入无关。我怀疑问题是注释处理器没有启用,在这种情况下,两种 DI 方法都行不通。
-
@RemkoPopma “请在 Micronaut GitHub 问题跟踪器上为此提出票证。” - 我认为没有任何必要。请参阅下面的答案。