Spring依赖注入,范围和内存泄漏

时间:2012-10-12 14:41:59

标签: spring memory-leaks dependency-injection struts2 scope

在我们的一个Web应用程序(Struts2 + Spring 2.5 + iBatis)中,我们使用以下MVC strcuture。

ActionClass< ---> ServiceInterface< ---> ServiceImplementationClass< ---> DAOClass< ---> DB

所有这些java类都是使用Spring实例化的。使用DI技术将Service类注入到Struts2 Action类中。我对spring应用程序上下文xml中使用的scope属性有疑问。

以下是我们的Spring applicationcontext.xml中的示例条目。

我想了解

一个。从并发的角度来看,只将动作类作为Prototype并将其余的图层类作为Singleton是正确的吗?

湾从内存泄漏的角度来看,是否有定义范围的指导原则?

    <bean id="commonAction" scope="prototype"
    class="com.xyz.action.CommonAction">
    <property name="commonService" ref="commonService" />
</bean>

<bean id="commonService" class="com.xyz.service.impl.CommonServiceImpl">
    <property name="commonDao" ref="commonDao" />
</bean>

<bean id="commonDao" class="com.xyz.dao.impl.CommonDAOImpl">
    <property name="sqlMapClient" ref="sqlMap" />
</bean>

这是我们的Struts xml条目

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.objectFactory" value="spring" />
    <package name="default" namespace="/" extends="struts-default">

您对此的回应表示赞赏。

1 个答案:

答案 0 :(得分:1)

如果不了解有关实现的实现的更多信息,则无法回答并发问题。行动预计是按要求的(即原型)。其他类的线程安全性取决于你 - 通常,服务和DAO应该被编写为线程安全的,因此默认的“单例”范围是可以的,但它们不需要 是单身人士,这只是典型的。对象实例化很便宜。

我不确定你从“内存泄漏的角度”看到的是什么,范围与内存泄漏没有直接关系 - 保留引用通常会导致泄漏。