spring容器使用接口注入

spring爲何要注入接口,而注入實現類就會報錯

如果只是單純注入是可以用實現類接收注入對象的,但是往往開發中會對實現類做增強,如事務,日誌等,實現增強的AOP技術是通過動態代理實現的,而spring默認是JDK動態代理,對實現類對象做增強得到的增強類與實現類是兄弟關係,所以不能用實現類接收增強類對象,只能用接口接收。

spring怎麼知道注入哪個實現?

如果Spring配置了component scan,並且要注入的接口只有一個實現的話,那麼spring框架可以自動將interface於實現組裝起來。如果沒有配置component scan,那麼你必須在application-config.xml(或等同的配置文件)定義這個bean。

需要@Qualifier和@Resource註解嗎?

一旦一個接口有多個實現,那麼就需要每個特殊化識別並且在自動裝載過程中使用@Qualifier和@Autowired一起使用來標明。如果是使用@Resource註解,那麼你應該使用resource中屬性名稱來標註@Autowired.

爲什麼@Autowired使用在interface上而不是實現類上?

首先,一般使用接口是很常用並且有益的變成技術。其次,在spring中,你可以在運行過程中注入各種實現。一個很經典的情況就是在測試階段,注入模擬的實現類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章