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