2014-04-08 60 views
0

我是Spring的新手,對它的工作原理有點困惑。我知道我可以使用應用程序上下文來實例化bean並將它們填充。然而,是否應該只寫Bean b = new Bean()然後讓Spring以某種方式自動填充Bean?獲取Spring對象實例化權利

我在Web應用程序中使用Spring進行實驗,並且據我所見,我需要將ApplicationContext注入到,比如說,servlet能夠從那裏實例化其他bean(服務,daos等) 。這有點麻煩,但可能有用。

但是,Spring是否能夠掛接到在applicationContext.xml中定義爲bean的類上發生的任何對象實例化?

回答

1

Spring是一個Inversion of Control容器。一個bean是一個生命週期由Spring管理的對象。如果你想讓Spring填充一個對象,它需要通過Spring,即。它需要是bean。

是春天意味着能夠鉤到任何對象實例化 這發生在定義爲applicationContext.xml的豆子類?

春天沒有掛鉤任何東西。您可以使用Spring和Spring來配置bean和它們之間的關係,以創建實例並將它們連接起來。

0

對於域對象,Spring提供經由@Configurable註釋的溶液:http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#aop-atconfigurable

它需要或編譯期加載時編織,因此,引入了一些額外的複雜性,但具有使用標準new Bean()語法的便利加上Spring的自動裝配在我​​看來是值得的。

或者,您可以將域對象定義爲具有prototype範圍的bean,並使用某些工廠使用Spring ApplicationContext.getBean()方法創建它們。在prototype的範圍內,每次都會返回一個新實例,並且由於您經歷了ApplicationContext,因此Spring將像往常一樣執行所有依賴注入魔法。

至於與singleton範圍服務和其他豆類,你通常不會先注射ApplicationContext,並用它檢索它們,而是你通過任何一個構造,調節器或基於標註的戰略將它們注入。該文件詳細說明如下:http://docs.spring.io/spring/docs/4.0.0.RELEASE/spring-framework-reference/htmlsingle/#beans-factory-collaborators