2012-04-30 59 views
2

部分非託管類我在我的代碼創建MyClass類的衆多對象。天色管理,在Java春天

public class MyClass { 

    private String a; 
    private Integer b; 
    private SomeObject c; 

    public A(String a, Integer b, SomeObject c) { 
     this.a = a; this.b = b; this.c = c; 
    } 

} 

反正我有可以使用Spring只是SomeObject注入到這個類,當我創建的MyClass的對象。 MyClass的是春季管理,因爲我需要以隨機方式產生在我的代碼相同的對象。我如何解決這個問題。

  1. 我做的getBean在我的SomeObject主要方法,並把它傳遞到MyClass的,每當我創造它的對象。

  2. 我創建了一個SomeObjectSingleton這是了ApplicationContextAware(它本身做了的getBean得到SomeObject)。我直接在MyClass構造函數中調用SomeObjectSingleton.getImpl。

你認爲哪種方式最合適,還是有其他更好的方法來解決這個問題。

回答

2

Spring管理解決方案

如果沒有與製作MyClass Spring管理,然後you could set the singleton property to false問題。這樣一來,只要你撥打context.getBean()MyClass一個新的實例將被實例化。

然後在上下文XML文件,你可以連線SomeObjectMyClass並保留其他兩個屬性(String aInteger b)未設置。需要注意的是,您必須使用setter注入,而不是構造注入,至少對於未在您的上下文XML文件中設置的屬性。

非Spring管理的解決方案

如果由於某種原因,你需要MyClass不被Spring管理,那麼我建議你的第一個方法,因爲它使用了比你的第二個方法SomeObjectMyClass之間的弱耦合。過度使用單例會導致代碼混淆,因爲它們本質上是一種隱藏依賴關係的全局變量。請參閱here以獲得更詳細的論點。