Struts2与Spring集成的小提示

把Spring集成到Struts2项目中,在Struts2的官网提供了Struts2-Spring插件来提供思路和解决方案,而在Spring官网的文档中,与Struts2集成的方法是连接到上述Struts2-Spring插件的页面的,不过Spring官网提供了通用的集成方法,这个方法倒是可以参考。

对于IoC功能的集成,Struts2的Spring插件在两个方面提供了集成:一方面是让Spring来生成Action类的实例,这个时候Action就是Spring的Bean,这就需要配置“struts.objectFactory = org.apache.struts2.spring.StrutsSpringObjectFactory”,这个StrutsSpringObjectFactory会首先根据class=...作为bean的name到Spring的Context中寻找bean,如果找到,就作为Action,否则,就把class=...作为类路径用反射机制实例化出一个对象;另一方面是让Spring来注入依赖Bean,这就需要用插件里带的拦截器,或者自己写拦截器来注入Bean,其本质是用了WebApplicationContext.getAutowireCapableBeanFactory().autowireBean(Object o)方法。

一般需要根据项目的需求来选择使用哪方面或两方面都使用。如果只使用第二方面,即使激活了第一方面也不会出错。建议如果只使用第二方面的话,自己写拦截器,而不要用插件里带的,因为插件里的有一些冗余代码。另外还需要考虑是否把WebApplicationContext放入值栈、ActionContext、ServletContext或是其他位置,以便在jsp里面调用。

如之前所说,Spring官方文档上的Struts2的集成方法其实指向到了之前说的Struts2-Spring的插件的页面上,而并没有介绍新的集成方法。其实,不管怎样集成,本质是一样的。可以参考Struts2的Spring插件的文档全文和Spring官方文档(3.0版本)上17.2节“Common configuration”的内容来整合,而不要一味的使用插件。

总之,了解本质更重要。个人理解,欢迎批评。如果你有耐心看完,不妨继续看一下下方的评论,说不定已经有人指出本文的错误或不足之处。

参考资料:
Struts2的Spring插件网址:http://struts.apache.org/2.x/docs/spring-plugin.html
Spring3.0的官方文档中17.2节:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/web-integration.html#web-integration-common

猜你喜欢

转载自newton449.iteye.com/blog/1170095