我有一个 Quarkus 项目,它使用 JDBI(和 Kotlin)并实现了一个 DAOUtils 类来生成它的各种 DAO。
@ApplicationScoped
class DAOUtils(
@DataSource("user") userDataSource: AgroalDatSource
) {
private val userJDdbi = Jdbi.create(userDataSource)
// more jdbi configuration here
@RequestScoped
fun userDAO(): UserDAO {
return userJdbi.onDemand(UserDAO::class.java)
}
}
interface UserDAO {
@SQLQuery("""
SELECT *
FROM user
WHERE id = :id
"""
)
fun findUser(
@Bind("id") id: Long
): User
}
UserDao 类然后被调用:
class UserService(
userDao: UserDAO
) {
fun findUser(id: Long) {
return userDao.findUser(id)
}
}
这里的目的是生成一个
UserDAO
对象,其生命周期与请求相关联,但是我所有的直觉和训练都告诉我,DAOUtils
方法应该用 @Produces
注释,如 here.
上面的代码可以编译,我可以取回数据,但我的一部分认为实现不正确(或者至少是次优的),尽管我的另一部分想知道它是否真的可以并且部分优化类似于我们如何在构造函数中省略
@Inject
。当前的实现是否正确,或者我是否还需要@Produces
,我如何验证 bean 是否被正确创建和销毁?