我正在嘗試使用 MongoRepository<T,ID> 介面的內置方法與 mongo 進行互動。
interface MovieRepository : MongoRepository<Movie, String> {
}
但是當我嘗試使用類實作“MovieRepository”時。它還要求我實作“MongoRepository”中定義的所有成員函式
class ControllerClass(private val MovieRepository: MovieRepository): MovieRepository {}
這是我初始化控制器類時得到的:
類 'ControllerClass' 不是抽象的,也沒有實作抽象成員 public abstract fun <S : Movie!> save(entity: S): S
有什么辦法讓我不需要在我的 ControllerClass 中再次定義所有這些 MongoRepository 的功能?
uj5u.com熱心網友回復:
您通常不會自己實作存盤庫介面:您讓 Spring 為您完成!
首先,您定義您的界面,就像您所做的那樣:
interface MovieRepository : MongoRepository<Movie, String> {
// Add any abstract methods you'll need here…
}
然后,您自動裝配該型別的屬性。在 Kotlin 中,您可以在主建構式中執行此操作,例如:
@Controller
class ControllerClass @Autowired constructor(
private val movieRepository: MovieRepository
) {
// …code…
}
或作為普通財產。(在這種情況下,因為您不能指定初始值,所以您必須將屬性設為 a var;它必須是可空的——要求!!在任何你使用它的地方——或者,更好的是,將它設為lateinit。)
@Controller
class ControllerClass {
@Autowired private lateinit var movieRepository: MovieRepository
// …code…
}
然后 Spring 將創建一些實作該介面的合成類,并將您的屬性設定為它。(您無需擔心它是如何做到這一點的——就像您無需擔心它所做的所有其他魔法一樣,其中大部分涉及創建合成子類。這就是通常需要制作 Spring 物件的原因open——并且為什么有一個Spring 插件可以解決這個問題。)
更常見的是在服務類中使用存盤庫,然后從您的控制器類中呼叫它——至少,這種模式往往可以更好地擴展,并且更容易遵循和測驗。但是直接這樣做也應該有效。無論哪種方式,您都可以呼叫所需的任何存盤庫方法,例如movieRepository.findAll().
請參閱Spring 檔案;他們使用 Java,但轉換為 Kotlin 幾乎是微不足道的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/504147.html
