Мне необходимо динамически создавать и уничтожать HttpClient
объекты, чтобы соответствовать клиентам, которые регистрируются / отменяют регистрацию в моем приложении Micronaut. В рамках этого я хочу добавить их как beans в контекст приложения, чтобы они автоматически использовали пользовательские HttpFilter
s также в проекте.
Я думал, что будет довольно просто управлять этими bean-компонентами, используя ApplicationContext
методы bean-компонентов с именем Qualifier
, чтобы отслеживать их, но то, как эти API-интерфейсы, кажется, ведут себя, меня сбивает с толку:
applicationContext.createBean(HttpClient.class, Qualifiers.byName("myLabel"), myUrl)
не работает с:
io.micronaut.context.exceptions.NoSuchBeanException: No bean of type
[io.micronaut.http.client.HttpClient] exists. Make sure the bean is not disabled by bean
requirements (enable trace logging for 'io.micronaut.context.condition' to check) and if the
bean is enabled then ensure the class is declared a bean and annotation processing is
enabled (for Java and Kotlin the 'micronaut-inject-java' dependency should be configured as
an annotation processor).
Почему важно, существует ли компонент? Я пытаюсь его создать!
applicationContext.findBean(HttpClient.class)
не работает с:
io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type [io.micronaut.http.client.DefaultHttpClient]
Message: Missing bean argument [LoadBalancer loadBalancer] for type: io.micronaut.http.client.DefaultHttpClient. Required arguments: LoadBalancer loadBalancer,HttpClientConfiguration configuration,String contextPath,HttpClientFilterResolver filterResolver
Почему он пытается его создать? Я просто хочу его найти!
(ПРИМЕЧАНИЕ. applicationContext.getBean(HttpClient.class, Qualifiers.byName("myLabel"))
может работать здесь, но поскольку я не смог решить первый пункт, я не смог это проверить)
applicationContext.destroyBean(HttpClient.class)
не позволяет указыватьQualifier
в методе, что означает, что я не могу использовать его для удаления bean-компонента из контекста. Он также возвращает null после создания bean-компонента без квалификатора (applicationContext.createBean(HttpClient.class, myUrl)
), что говорит о том, что он все равно не может найти созданный bean-компонент ...
Полагаю, я использую неправильный API, но какой правильный?
В общем, я полностью запутался - любая помощь по правильному использованию этих API будет приветствоваться.