我在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生成的类。