【问题标题】:Does CDI with Spring DI annotation works when its from an external dependency?当 CDI 来自外部依赖项时,带有 Spring DI 注释的 CDI 是否有效?
【发布时间】:2020-05-29 20:36:44
【问题描述】:

我正在编写一个需要与 Quarkus 和 Spring DI 兼容的代码。 我正在使用 DI 和 Spring Boot 属性扩展,即 Spring Boot 扩展。显然,它工作正常,但是从注释为 bean 的外部依赖项注入任何其他对象不会在任何地方注入。 Quarkus 似乎没有认出它。

这是 Spring DI 扩展的某种限制吗? 我已经尝试过使用quarkus.index-dependency 属性,还尝试将依赖项包含在 Quarkus 扩展中,但没有成功。

编辑 1: 正如@Kolossus 所说,添加beans.xml 解决了DI 问题,但我遇到了另一个与属性类相关的错误:

java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors

        [error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: javax.enterprise.inject.spi.DeploymentException: Found 3 deployment problems: 
[1] Ambiguous dependencies for type com.properties.IntegrationProperties and qualifiers [@Default]
        - java member: com.authorization.AuthenticationService#<init>()
        - declared on CLASS bean [types=[com.authorization.AuthenticationService, java.lang.Object], qualifiers=[@Named(value = "authenticationService"), @Default, @Any], target=com.authorization.AuthenticationService]
        - available beans:
                - CLASS bean [types=[com.properties.IntegrationProperties, java.lang.Object], qualifiers=[@Default, @Any], target=com.properties.IntegrationProperties]
                - PRODUCER METHOD bean [types=[com.properties.IntegrationProperties, java.lang.Object], qualifiers=[@Default, @Any], target=com.properties.IntegrationProperties produceIntegrationProperties(org.eclipse.microprofile.config.Config), declaringBean=io.quarkus.arc.runtime.config.ConfigPropertiesProducer]

属性类的所有注入点中的不明确依赖项。

【问题讨论】:

  • 您是否尝试过将beans.xmljandex.idx 添加到第三方JAR 的META-INF 中?您应该在此处添加您尝试注入的 bean 的代码;可能只是它不满足归类为 bean 的要求。
  • 谢谢,这解决了我的问题,即 Quarkus 没有找到在依赖项中声明的 bean,但现在@ConfigurationProperties 类的注入存在不明确的依赖项问题

标签: dependency-injection quarkus


【解决方案1】:

beans.xml 添加到依赖项解决了我的问题。属性类的问题在于该类被这样注释:

@Configuration @ConfigurationProperties(prefix = "some-prefix") public class IntegrationProperties

所以 Quarkus 创建了 2 个相同类型的 bean,一个是因为 @configuration 而另一个是因为 @ConfigurationProperties。 我通过添加@EnableConfigurationProperties(IntegrationProperties.class) 来修复它 在另一个配置类中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 2022-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多