Axon 事件处理程序和查询处理程序在 kotlin 中不能一起工作

Axon event handler and query handlers do not work together in kotlin

代码:

@Component
open class UserProjectionQuery {
    @Autowired
    private lateinit var repository: UserDocumentRepository
    @Autowired
    private lateinit var updateEmitter: QueryUpdateEmitter

    @QueryHandler
    fun handle(query: QueryUserIdForUsername): String? {
       //stuff
    }

    @EventHandler
    fun on(evt: UserAuthenticated) {
       //stuff
    }
}

显然它不会注入我的存储库,也不会更新发射器。 事件处理程序创建 AnnotationQueryHandlerAdapter 而不是 AnnotationEventHandlerAdapter.

atm 的解决方案是将 @EventHandler 移出以将 class 分开并保持在那里,同时 @QueryHandler 也分开 class。

我记得它与 java 一起工作。我不确定我在这里遗漏了什么,但它似乎是一个 spring-kotlin 错误? 任何提示将不胜感激,谢谢

这很奇怪。我确定我的示例在类似的用例中可以正常工作

https://github.com/idugalic/digital-restaurant/blob/master/drestaurant-apps/drestaurant-microservices-rest/drestaurant-microservices-rest-restaurant/src/main/kotlin/com/drestaurant/query/handler/RestaurantHandler.kt

考虑使用构造函数注入您的依赖项(您将避免 varlateinit

class UserProjectionQuery(private val repository: UserDocumentRepository, private val updateEmitter: QueryUpdateEmitter)

也可以使用maven插件kotlin-maven-plugin打开所有Spring配置类:https://github.com/idugalic/digital-restaurant/blob/master/pom.xml#L177