Как внедрить бины и создавать пользовательские бины в приложении Micronaut cli - PullRequest
0 голосов
/ 16 января 2019

Я хочу добавить бобы в приложение microronaut cli

Пример: ниже мой командный класс

@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 согласно документации (https://docs.micronaut.io/latest/api/io/micronaut/context/annotation/Factory.html) и создал бин, но не повезло

@ 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: Не удалось ввести значение для поля [someBean] класса: com.UtilityCommand

Путь пройден: UtilityCommand.someBean

...