Axon事件处理程序和查询处理程序在Kotlin中无法一起使用

时间:2019-05-09 14:12:52

标签: axon

代码:

@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移到单独的班级中,同时将@QueryHandler放在单独的班级中。

我记得它正在使用Java。我不确定我在这里缺少什么,但似乎是一个弹簧kotlin的错误? 任何提示将不胜感激,谢谢

1 个答案:

答案 0 :(得分:2)

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

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