读书人

为啥要把action交个spring

发布时间: 2013-07-04 11:45:33 作者: rapoo

为什么要把action交个spring
平时都是s2sh在整合使用,今天发现一个问题。我spring和hibernate的整合起来,我把dao和service交给spring。然后相应的注入进去。但是我action不交给spring,也是可以的。那么为什么要整合struts2和spring呢?
我代码大体如下:
struts.xml:<!--我的action这样就是由struts2管理的吧-->
<struts>
<package name="Aaction" extends="struts-default">
<action name="a" class="com.gy_center.action.SysUserAction"></action>
</package>
</struts>

Action如下:
public class SysUserAction extends ActionSupport{
private static final long serialVersionUID = 1L;
@Resource
private ISysUserService sysUserService;
@Override
public String execute() throws Exception {
sysUserService.save();
return null;
}
}

service:如下(下面是实现类,接口不贴了)
@Service
public class SysUserServiceImpl implements ISysUserService{
@Resource(name="sysUserDao")
private ISysUserDao sysUserDao;
public void save() {
SysUser sysUser=new SysUser();
sysUser.setUsername("车认识");
sysUserDao.save(sysUser);

}
}
Dao如下:、
@Repository
public class SysUserDao extends HibernateDaoSupport implements ISysUserDao {
@Resource(name="sessionFactory")
public void setBaseSessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
..........//其余操作方法。
}
整个框架我采用spring的自动扫描的方式来管理bean。但是我的action上并没有注解@Controller,说明spring无法扫描到这个action,也不会生成这个action的实例。
这样一样说明我的struts2并没有和spring整合。
但是上面的例子完全是可以运行的。可以成功向数据库插入数据。
我想问问大家,那为什么还要把action交给spring去管理呢。????
求真理!!!!!!!!!
Spring 管理 Struts
[解决办法]
没有为什么,你的struts.xml配置class的全路径,就是由struts帮你实例化,没有经过spring实例化,如果class是使用spring的bean id编号,就是经由spring实例化管理的,个人喜好问题,不过你的dao,service都放到spring的配置里,如果独立的struts不放过去,你觉得到时候找问题要在一个地方找方便还是两个地方方便,,,主要还是为了降低耦合度,然后方便管理而已


[解决办法]
应该是交给spring去处理吧,在struts中设置一下交给spring处理!
[解决办法]
struts2中的Action默认的实例化和管理是由struts容器来管理的:


<bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />
<bean type="com.opensymphony.xwork2.ObjectFactory" name="struts" class="org.apache.struts2.impl.StrutsObjectFactory" />


但是在整合的时候,需要交给spring来管理,这个是为了项目整体方便管理,毕竟bean由struts和spring两个容器来管理,是比较混乱的做法,在整合的时候加入下面这句:

<constant name="struts.objectFactory" value="spring"/>


这里的value="spring"所对应的class类也是从struts的ObjectFactory继承而来

读书人网 >J2EE开发

热点推荐