我需要动态创建和销毁HttpClient
对象,以与客户在我的 Micronaut 应用程序中注册/注销自己相对应。作为其中的一部分,我想将它们作为 bean 添加到应用程序上下文中,以便它们HttpFilter
在项目中也自动使用自定义 s。
ApplicationContext
我认为使用带有名称的 bean 方法来管理这些 beanQualifier
以跟踪它们会相当简单,但是这些 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).
为什么 bean 是否存在很重要?我正在努力创造它!
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
在方法中指定 a ,这意味着我不能使用它从上下文中删除 bean。它还在没有限定符 (applicationContext.createBean(HttpClient.class, myUrl)
) 的 bean 创建后返回 null ,这表明它无论如何都找不到创建的 bean ......
我假设我在这里使用了错误的 API,但正确的 API 是什么?
总而言之,我非常困惑 - 欢迎任何有关正确使用这些 API 的帮助。