首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

struts2 的action范例方式

2012-08-24 
struts2 的action实例方式http://blog.sina.com.cn/jiwenbin550在我们集成struts2+spring+hibernate,也就

struts2 的action实例方式
http://blog.sina.com.cn/jiwenbin550

在我们集成struts2+spring+hibernate,也就是所谓的S2SH,不可避免的要引入struts2-spring-plugin.jar插件。当引入这个插件后,原先所struts创建的action类,交给了spring创建。在struts2-spring-plugin.jar中有一个struts-plugin.xml,里面声明了action类由spring工厂创建。在struts2插件文档里,这样写着“The Spring Plugin works by overriding the Struts ObjectFactory to enhance the creation of core framework objects。”这个插件重写了struts的对象工厂,当创建一个action类时,它会根据struts的配置文件的class属性的值与spring配置文件中的id属性的值相匹配。如果没有与之相匹配,将会像没有使用这个插件前一样创建,然后由spring自动装配。

         那时我有些不是很明白,为什么我的action类没有写注解@Component("xxAction"),还是可以被spring自动装配。那是因为action类被struts和struts2-spring-plugin创建,再由spring自动装配,但不由spring管理。如果我们想使用spring复杂的aop或spring其他的功能时,强烈建议将acion类注册到spring容器中。

         今天,再次做测试,又有了出乎意料的结果。在此说明,我的测试中用的是annotion注解,不是xml文件。

         之前,我们说过,当创建一个action类时,它会根据struts的配置文件的class属性的值与spring配置文件中的id属性的值相匹配。如果没有与之相匹配,将会像没有使用这个插件前一样创建,然后由spring自动装配。这两种情况会出现不同的结果。现在我们慢慢来说明。

          假设我们有一个AddUserAction的类,位于com.action包下,它有属性userService:

    


      
这时,struts的配置文件的class属性的值与spring配置文件中的id属性的值匹配。如果我们不想装配userService,可以将@Resource(name="userService")删除。
       所以,在struts.xml里的class的属性值决定你以那种方式创建action类,我个人倾向于将action类交给spring管理和自动装配。

热点排行