平时都是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

解决方案 »

  1.   

    没有为什么,你的struts.xml配置class的全路径,就是由struts帮你实例化,没有经过spring实例化,如果class是使用spring的bean id编号,就是经由spring实例化管理的,个人喜好问题,不过你的dao,service都放到spring的配置里,如果独立的struts不放过去,你觉得到时候找问题要在一个地方找方便还是两个地方方便,,,主要还是为了降低耦合度,然后方便管理而已
      

  2.   

    应该是交给spring去处理吧,在struts中设置一下交给spring处理!
      

  3.   

    恩,但是现在我们这里这个项目就是要把action不交给spring。由于我不知道不交给spring会不会出上面无问题。所以前来求教。网上也有人说了,只是为了方便,移植,降低耦合度。单单是这些理由不知道有没有什么更具有说服力的理由呢?》
      

  4.   

    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继承而来