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