Трудно сказать, что не так, не видя проект, который демонстрирует проблему, но я ожидаю, что что-то неправильно настроено в проекте, или вы создаете экземпляр компонента, а не позволяете контейнеру DI создать его для вас.
См. Проект на https://github.com/jeffbrown/mithrandirclient.
https://github.com/jeffbrown/mithrandirclient/blob/2c86d361db42f9beff4bb7620789fd4e422941d0/src/main/java/mithrandirclient/TestClient.java
package mithrandirclient;
import io.micronaut.http.client.RxHttpClient;
import io.micronaut.http.client.annotation.Client;
import javax.inject.Inject;
import javax.inject.Singleton;
@Singleton
public class TestClient {
@Inject
@Client("http://localhost:8086")
RxHttpClient httpClient;
public String getRandomName(){
System.out.println("getRandomName invoked => " + httpClient);
return "Some Random Name";
}
}
https://github.com/jeffbrown/mithrandirclient/blob/master/src/main/java/mithrandirclient/DemoController.java
package mithrandirclient;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
@Controller("/demo")
public class DemoController {
private TestClient testClient;
public DemoController(TestClient testClient) {
this.testClient = testClient;
}
@Get("/")
public String index() {
return testClient.getRandomName();
}
}
Когда я отправляю запрос контроллеру, Я получаю ожидаемый результат:
$ curl http://localhost:8080/demo
Some Random Name
Консоль сервера показывает, что клиент на самом деле не null
:
getRandomName invoked => io.micronaut.http.client.DefaultHttpClient@39ce2d3d
ОБНОВЛЕНИЕ:
При коммите в https://github.com/jeffbrown/mithrandirclient/commit/0ba0216bca4f31ee3ff296579b829ab4615fa6db код больше похож на код в исходном вопросе, но результат тот же.Инъекция работает, а клиент не null
.