在我们的一个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">
您对此的回应表示赞赏。
答案 0 :(得分:1)
如果不了解有关实现的实现的更多信息,则无法回答并发问题。行动预计是按要求的(即原型)。其他类的线程安全性取决于你 - 通常,服务和DAO应该被编写为线程安全的,因此默认的“单例”范围是可以的,但它们不需要 是单身人士,这只是典型的。对象实例化很便宜。
我不确定你从“内存泄漏的角度”看到的是什么,范围与内存泄漏没有直接关系 - 保留引用通常会导致泄漏。