当前位置: 首页 > 知识库问答 >
问题:

如何在Micronaut cli应用程序中注入bean和创建自定义bean

子车新立
2023-03-14
@command(name = "com/utils", description = "..",
mixinStandardHelpOptions = true, header = {..})
public class UtilityCommand implements Runnable {

@Inject
SomeBean somebean;

public void run() {
somebean.method1();
}
}

# Now I want to create Singleton bean using below syntax #

@Singleton
public class SomeBean {

 @Inject RxHttpClient client;

 void method1(){
client.exchange(); // Rest call goes here
}

}

@Factory公共类MyFactory{

 @Bean
 public SomeBean myBean() {
     new SomeBean();
 }

}

用于检查详细输出##的简单测试案例

public class UtilityCommandTest {

@test
public void testWithCommandLineOption() throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
System.setOut(new PrintStream(baos));

try (ApplicationContext ctx = ApplicationContext.run(Environment.CLI, Environment.TEST)) {
    **ctx.registerSingleton(SomeBean.class,true);**
    String[] args = new String[] { "-v"};
    PicocliRunner.run(UtilityCommand.class, ctx, args);
    assertTrue(baos.toString(), baos.toString().contains("Hi!"));
}
}

picocli.CommandLine$InitializationException:无法实例化类Com.UtilityCommand:IO.Micronaut.Context.Exceptions.DependencyInjectionException:无法为类Com.UtilityCommand的字段[someBean]注入值

采取的路径:UtilityCommand.SomeBean

共有2个答案

安博文
2023-03-14

是否尝试使用@requires注释?

command(name = "com/utils", description = "..",
mixinStandardHelpOptions = true, header = {..})
@Requires(beans = SomeBean.class)
public class UtilityCommand implements Runnable {

  @Inject
  SomeBean somebean;

  public void run() {
    somebean.method1();
  }
}
唐焕
2023-03-14

我也遇到了,我注意到我在main中使用了Picocli runner

public static void main(String[] args) {
new CommandLine(commandObject).execute(args);
}

我换了Micronaut的PicocliRunner,它起作用了

public static void main(String[] args) {
PicocliRunner.run(commandObject.class,args);
}

还有,我看到了这个例子

 类似资料:
  • 我想用java为创建自定义注释。我想用这个注释比较两个字符串值,比较后会返回一个

  • 问题内容: 序列化器很少,例如 我们如何创建自己的自定义序列化程序? 问题答案: 在这里,您有一个示例,将自己的序列化器/解串器用于Kafka消息值。对于Kafka消息密钥是同一回事。 我们希望将MyMessage的序列化版本作为Kafka值发送,并再次将其反序列化为使用方的MyMessage对象。 在生产者端序列化MyMessage。 您应该创建一个实现org.apache.kafka.comm

  • 如何创建自己的自定义序列化程序?

  • 问题内容: 在自定义的Wicket类中,与下面的类似,我使用的是应由Spring注入的服务bean,如通过SpringBean批注定义的(来自wicket- spring项目)。 但是,这是行不通的:NullPointerException失败,因为由于 某种原因Spring尚未注入该bean 。 奇怪的是,我在Wicket页面上使用了与匿名内部类完全相同的Model代码,并且在那里没有问题。 我

  • 我尝试了以下文章中描述的步骤 或者和这篇GitHub帖子一样 这对我不起作用。 我也读到这种方法:看这里,但这不是我在寻找的 我如何定制我的库,使Micronaut能够直接在我的项目中创建和注入它的bean?

  • 问题内容: 我想以编程方式将bean定义添加到应用程序上下文中,但是该定义的某些属性是该上下文中的其他bean(我知道它们的名称)。我该怎么做才能注入那些属性? 例如: 我正在使用Spring 3.0。 问题答案: 用途: