我在Kotlin中实现了以下存储库:
@Repository
class SapArticleRepository(jooqDsl: DSLContext, jooqConfiguration: DefaultConfiguration) :
    AbstractSapRepository<TrmSapArticleRecord, TrmSapArticlePojo>(jooqDsl, jooqConfiguration)
具有以下基类:
abstract class AbstractSapRepository<R : UpdatableRecord<R?>, TPojo>(
    var dao: DAOImpl<R, TPojo, Long>,
    jooqDsl: DSLContext,
    jooqConfiguration: DefaultConfiguration,
) {
    fun findById(id: Long) = dao.findById(id)
}
运行集成测试时,我得到一个异常,因为dao为空。我检查了(通过调试):调用构造函数时dao不为空,但调用findById时确实为空。我注意到对象引用不一样(因为CGLIB,Spring代理),但我不知道构造函数调用和创建代理bean之间发生了什么。
我尝试了在SapArticleRepository中实现的抽象函数getDaoImpl()(返回对象实例)和调用该方法(而不是访问dao),但这似乎过于复杂。必须有一种方法来传递构造函数参数/字段,使其在使用Bean时仍然存在。
注意TrmSapArticleDao 只是Jooq生成的类。