當我們將類標註爲@Autowired
時,它是否必須是接口或可以是類?彈簧自動佈線類
所有使用Spring的例子我已經看過,使用一個接口然後在一個類上實現它。接口類型然後用於調用具體類的函數。我們能不能簡單地將@Autowired
添加到具體的類而不是界面。
我知道程序在JAVA中的一個接口類比,但是如果你不依賴於Polymorphism,那麼爲什麼要寫一個接口呢?
當我們將類標註爲@Autowired
時,它是否必須是接口或可以是類?彈簧自動佈線類
所有使用Spring的例子我已經看過,使用一個接口然後在一個類上實現它。接口類型然後用於調用具體類的函數。我們能不能簡單地將@Autowired
添加到具體的類而不是界面。
我知道程序在JAVA中的一個接口類比,但是如果你不依賴於Polymorphism,那麼爲什麼要寫一個接口呢?
不,你不必使用界面,這是完全沒問題,只要春天而言:
@Service
public class FooService {
@Autowired
private FooDao fooDao;
}
,或者你甚至可以去建設注入:
@Service
public class FooService {
private final FooDao fooDao;
public FooService(FooDao fooDao) {
this.fooDao = fooDao;
}
}
常接口是每一代接下來的一代重複的anachronic實踐。如果不需要,請勿使用它們。如果他們總是隻有一個實現,或者你想嘲笑這樣的類(現代嘲諷框架模擬類沒有任何問題),他們不是必需的。
注入混凝土類也沒有錯,例如上面的例子中的FooDao
。它具有一些技術含義。代理,但沒有什麼不能被理解。
技術上@Autowired
可用於實現或接口。春天不關心它。注入接口是一種設計策略。
@Autowired也可以用於類而不是接口。 但是,使用接口會更好,因爲它減少了組件之間的硬連接。