日期:2014-05-18  浏览次数:20849 次

为什么要把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不放过去,你觉得到时候找问题要在一个地方找方便还是两个地方方便,,,主要还是为了降低耦合度,然后方便管理而已