【发布时间】:2023-03-05 18:34:01
【问题描述】:
我有一个 @Configuration 类,我尝试使用它来自定义我的应用程序的 JMS 组件的配置。这是简化的代码:
@Configuration
class JmsConfiguration(
val props: JmsProperties
) : JmsListenerConfigurer {
@Bean
fun connectionFactoryManager(): ConnectionFactoryManager {
return ConnectionFactoryManager(props.services.map { serviceProps ->
connectionFactory(serviceProps)
}.toList())
}
@Bean
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
fun connectionFactory(serviceProps: JmsServiceProps): ConnectionFactory {
val cf = MQConnectionFactory()
// some configuration
return cf
}
override fun configureJmsListeners(registrar: JmsListenerEnpointRegistrar) {
// adding custom message listeners to registrar
}
}
问题是 Spring 抱怨 connectionFactory 方法,它的参数 serviceProps 说如下:“JmsConfiguration 中的方法 connectionFactory 的参数 0 需要一个无法找到的 JmsServiceProps 类型的 bean”这很奇怪。我以为spring不会为prototype作用域bean工厂方法查找参数?如果不是这种情况,我不知道应该如何创建这样的实例?
注意:我需要这些连接工厂出现在 spring 上下文中,因为它们之后会被其他组件包装。
【问题讨论】:
-
我猜
@Configuration @EnableConfigurationProperties(JmsServiceProps.class)? -
@Eugene 是的,你是对的,我只是错过了,问题不在于我的属性没有被读取。 Spring 出于某种原因试图在我手动调用此方法时在上下文中找到
serviceProps。
标签: java spring kotlin dependency-injection