带依赖注入的Spring / Camel垃圾收集

时间:2011-08-19 13:55:13

标签: spring memory-management dependency-injection garbage-collection

我已经配置了一个Spring应用程序(使用Camel与ActiveMQ代理集成),这样两个特定的类,比如PersonPersonality,就可以连接并注入所有依赖项自动通过Spring容器。为了这个例子,Person个对象 Personality个对象作为成员/属性。所以Spring配置文件连接Personality实例,并且有线People bean中引用了这些bean:

<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>

两个bean都在范围内指定为 prototypes ,因为这对我的应用程序有意义。基本上,我每次获得新Personality时都需要抓取Person的新实例。

我的问题:

这是我第一次使用Spring和IoC /依赖注入的应用程序。我担心垃圾收集和内存泄漏。当bean是原型时,你有原型嵌套在原型中(通过 has-a 关系),你是否需要担心GC /内存泄漏?或者Spring容器能否为您解决所有这些问题?是否有关于Spring / IoC内存管理的最佳实践?任何反模式都可以避开?

我的实际业务对象非常庞大,而且我会生产很多,所以如果我开始走上一条充满糟糕内存管理的道路,那将是一次非常非常颠簸的旅程。

谢谢!

1 个答案:

答案 0 :(得分:1)

上面的代码中由spring引起的垃圾收集没有问题。您可以将上面的spring配置视为另一种说法,

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

Spring没有维护对它创建的原型bean的引用,因此spring本身不会导致内存泄漏。

Spring确实维护对单例作用域bean的引用,并且在包含应用程序上下文之前不会对它们进行gc。