天天看點

局部變量也能使用Spring工廠得到對象

                              局部變量也能使用Spring工廠得到對象

Spring是一種IOC(依賴注入)容器,它是建立型模式的最進階應用。GOF的23種設計模式,分為3類:建立型模式,結構型模式,行為型模式。建立型模式是為了得到Java對象的一類設計模式。

Spring使用xml配置檔案,在運作時,動态生成Java對象。現在,也可以使用标注的形式進行配置。

我們知道,java的反射,隻能夠獲知類的屬性和方法的一些運作時特性,但是無法知道局部變量的特性。

是以,Spring隻能夠使用自動裝配Java類的屬性。如果我們需要建立局部變量的執行個體,那麼Spring是無法幫助我們自動建立的!

這怎麼辦呢?難道我們的局部變量就不能使用IOC容器了嗎?不能利用建立型模式的優點了嗎?

辦法還是有的。既然Spring無法在運作時為我們自動建立和裝配局部變量所需的對象,我們可以手工指定從Spring容器中得到對象。

一個使用Spring的應用程式,會有一個ApplicationContext類型的對象代表Spring容器。我們完全可以得到這個ApplicationContext對象的引用。在程式中直接使用它來通過Spring容器得到所需的對象。

如,我們把ApplicaitonContext對象的引用放置在一個類的靜态變量中為我所用,如,我們自建的SPringUtil類的.getBean(“”)方法等價于ApplicationContext.getBean(“”)方法。

現在,在局部變量中,我們可以使用SpringUtil.getBean(“”)的方法,從Spring容器中得到對象。

雖然,現在在源代碼中出現了配置字元,但是,我們可以通過修改Spring配置檔案達到避免修改源代碼的效果。

而且,我們的源代碼還沒有和Spring綁定。因為SpringUtil類是我們自定義的一個類,通過修改其實作,我們完全可以使用其它IOC容器來提供建立對象的功能。

另一個需要注意的地方是,通常,我們建立的局部變量,一般都是多例的。我們希望每一次都建立一個新的對象。

這在Spring配置中,需要提供屬性:scope="prototype"