1

我已經配置了一個Spring應用(使用Camel與ActiveMQ代理集成),使得兩個特定的類(例如PersonPersonality)獲得連線並注入其所有依賴關係自動通過Spring容器。對於此示例,Person對象具有Personality對象作爲成員/屬性。所以在Spring配置文件導線起來Personality實例,這些bean在有線People豆被引用:依賴注入彈簧/駱駝垃圾收集

<bean id="personality" class="com.me.someProgram.Personality" singleton="false"> 
    <!-- blah... --> 
</bean> 

<bean id="person" class="com.me.someProgram.Person" singleton="false"> 
    <!-- People have Personalities --> 
    <property name="personality" ref="personality"/> 
    <!-- blah... --> 
</bean> 

豆都被指定爲原型範圍,因爲這是有道理的,我的應用程序。基本上,我每次獲得新的Person時都需要獲取Personality的新實例。

我的問題:

這是使用Spring我的第一個應用程序,和一般的IoC /依賴注入。我擔心垃圾收集和內存泄漏。當bean是原型時,並且原型中嵌套了原型(通過has-a關係),您是否需要擔心GC /內存泄漏?或者Spring容器是否緩解了所有這些問題?是否有關於Spring/IoC內存管理的最佳實踐?任何反模式,以避免?

我的實際業務對象非常大,而且我會製作其中的很多,所以如果我開始走向一條充滿不良內存管理的道路,這將是一次非常非常顛簸的過程。

謝謝!

回答

1

在上面的代碼中,彈簧會導致垃圾回收沒有問題。你可以把Spring配置上面的另一種說法,

Personality personality = new Personality(); 
Person person = new Person(); 
person.setPersonality(person); 

春不保持基準原型它創造豆,所以彈簧本身不會造成內存泄漏。

Spring確實保持對singleton作用域bean的引用,直到包含的應用程序上下文爲止,這些bean都不會被gc'd引用。

+0

值得每一點!謝謝! – IAmYourFaja