带有 Spring DI 注释的 CDI 在来自外部依赖项时是否有效?
Does CDI with Spring DI annotation works when its from an external dependency?
我正在编写需要与 Quarkus 和 Spring DI 兼容的代码。
我同时使用 DI 和 Spring 引导属性扩展,Spring 引导扩展。显然,它工作正常,但是从注释为 bean 的外部依赖项中注入任何其他对象都不会注入到任何地方。 Quarkus 好像没认出来
这是 Spring DI 扩展的某种限制吗?
我已经尝试使用 quarkus.index-dependency
属性 并且还尝试包含结构为 Quarkus Extention 的依赖项,但它没有用。
编辑 1:
正如@Kolossus 所述,添加 beans.xml
解决了 DI 问题,但我遇到了另一个与属性 class:
相关的错误
java.lang.RuntimeException:io.quarkus.builder.BuildException:构建失败:构建因错误而失败
[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]
属性的所有注入点中的不明确依赖关系 class。
将 beans.xml
添加到依赖项解决了我的问题。属性 class 的问题在于 class 的注释如下:
@Configuration
@ConfigurationProperties(prefix = "some-prefix")
public class IntegrationProperties
所以 Quarkus 创建了 2 个相同类型的 bean,一个是因为 @configuration
,另一个是因为 @ConfigurationProperties
。
我通过添加 @EnableConfigurationProperties(IntegrationProperties.class)
修复了它
在另一种配置中 class.
我正在编写需要与 Quarkus 和 Spring DI 兼容的代码。 我同时使用 DI 和 Spring 引导属性扩展,Spring 引导扩展。显然,它工作正常,但是从注释为 bean 的外部依赖项中注入任何其他对象都不会注入到任何地方。 Quarkus 好像没认出来
这是 Spring DI 扩展的某种限制吗?
我已经尝试使用 quarkus.index-dependency
属性 并且还尝试包含结构为 Quarkus Extention 的依赖项,但它没有用。
编辑 1:
正如@Kolossus 所述,添加 beans.xml
解决了 DI 问题,但我遇到了另一个与属性 class:
java.lang.RuntimeException:io.quarkus.builder.BuildException:构建失败:构建因错误而失败
[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]
属性的所有注入点中的不明确依赖关系 class。
将 beans.xml
添加到依赖项解决了我的问题。属性 class 的问题在于 class 的注释如下:
@Configuration
@ConfigurationProperties(prefix = "some-prefix")
public class IntegrationProperties
所以 Quarkus 创建了 2 个相同类型的 bean,一个是因为 @configuration
,另一个是因为 @ConfigurationProperties
。
我通过添加 @EnableConfigurationProperties(IntegrationProperties.class)
修复了它
在另一种配置中 class.