2012-10-29 38 views
3

當我們將類標註爲@Autowired時,它是否必須是接口或可以是類?彈簧自動佈線類

所有使用Spring的例子我已經看過,使用一個接口然後在一個類上實現它。接口類型然後用於調用具體類的函數。我們能不能簡單地將@Autowired添加到具體的類而不是界面。

我知道程序在JAVA中的一個接口類比,但是如果你不依賴於Polymorphism,那麼爲什麼要寫一個接口呢?

回答

4

不,你不必使用界面,這是完全沒問題,只要春天而言:

@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。它具有一些技術含義。代理,但沒有什麼不能被理解。

3

技術上@Autowired可用於實現或接口。春天不關心它。注入接口是一種設計策略。

2

@Autowired也可以用於類而不是接口。 但是,使用接口會更好,因爲它減少了組件之間的硬連接。