2010-05-13 71 views
6

我知道Spring不支持接口注入,而且我已經閱讀了很多次。不是Spring真的支持接口注入嗎?

但是今天當我遇到一篇關於國際奧委會的文章Martin Fowler(link)時,似乎在Spring中使用ApplicationContextAware是一些類似於Interface的注入。我們將實現ApplicationContextAware並實現setApplicationContext(ApplicationContext上下文)方法,並且我們將把bean包含在配置文件中。這與接口注入不一樣,在這裏告訴Spring注入(或),比如將上下文的引用傳遞給這個bean?

或者我在這裏錯過了一些東西?感謝您的任何信息!

ManiKanta

+3

聽起來像你一直在閱讀一些不好的東西,春天非常*不支持接口注入。 – skaffman 2010-05-13 13:33:20

+1

「界面注入」是什麼意思?我只有大約100個定義了void setSomething(Something)的bean的示例,其中Something是一個接口,而不是一個類,Spring很樂意注入實現接口的類實例嗎? – bmargulies 2010-05-13 13:33:37

+0

@skaffman我沒有看到Spring支持接口注入,即使在Spring文檔中也是如此(http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html# beans-factory-collaborators) – manikanta 2010-05-14 05:07:33

回答

6

如果你的意思是接口注入as defined on wikipedia,春分別支持它出去ResourceLoaders,的ApplicationContexts,MessageSource的,和其他的盒子,與接口ResourceLoaderAware,,MessageSourceAware

也可以通過註冊BeanPostProcessor用新接口來擴展這種機制。

這個功能的彈簧參考手冊explains這個功能(以及什麼時候應該(不)使用它)很清楚。順便說一句,我一般認爲春季參考手冊比'互聯網上的人'說的要可靠得多。

+1

是啊!儘管Spring實際上並不支持接口注入,但我們仍然可以使用Autowiring技術實現相同的效果(http://opensource.atlassian.com/confluence/spring/display/DISC/Adding+Interface+Injection+to+Spring )。 順便說一下,Martin Fowler是介紹DI的人。不是嗎?所以,可能我們可以檢查他的文章。是的,那篇文章是一般的。因此,所有文章的內容可能不適用於Spring案例。 如果有些東西不正確,糾正我! – manikanta 2010-05-14 05:18:56