如何将旧的 Struts 应用程序与 Spring 3.x 集成
我想知道如何以及什么是将 Struts 1.x 应用程序与 Spring 3.x 集成的首选方式,以便我们可以从 IOC 中受益。
i was wondering how to and what the prefered way of integrating an Struts 1.x application with Spring 3.x so we can benefit from the IOC stuff.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用ContextLoaderPlugin并将struts控制器设置为processorClass“<像这样的 href="http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/web/struts/AutowiringRequestProcessor.html">AutowiringRequestProcessor" (在struts-config.xml中):
action-servlet.xml必须是一个空的bean上下文文件:
将以下init参数添加到web.xml中的ActionServlet:
只需编写常规的struts操作,并添加注释“@Component”到每一个动作,这样 spring 就会发现这些动作并从中创建一个 bean。 “AutowiringRequestProcessor”将找到与 struts-config.xml 中定义的操作类匹配的正确 bean。
现在还可以使用 setter 上的 @Autowired 将其他 bean 注入到 Action 类中。
Use ContextLoaderPlugin and set the struts controller to the processorClass "AutowiringRequestProcessor" like this (in struts-config.xml):
action-servlet.xml has to be an empty beans context file:
Add the following init parameter to the ActionServlet in web.xml:
Just write regular struts actions, and add the annotation "@Component" to every action so that spring will discover the actions and creates a bean out of it. The "AutowiringRequestProcessor" will find the right bean that matches the action class defined in your struts-config.xml.
It's now also possible to have other beans injected into you Action class with @Autowired on setter(s).
使用 ContextLoaderPlugIn。在 Spring 3.0 中已弃用,但仍然存在。
我将它与 Struts 1.x 和 Spring 2.5.x 一起使用 - 它工作得非常好。这种集成方法允许将 Spring bean 直接注入到 Struts 操作中,这是非常干净和简单的。
Use ContextLoaderPlugIn. Deprecated in Spring 3.0, but still there.
I used it with Struts 1.x and Spring 2.5.x - it worked beautifully. This integration approach allows to inject Spring beans directly into Struts actions, which is pretty clean and straightforward.
您可以使用 ApplicationContextAware 接口让实用程序类能够访问 ApplicationContext。
然后您可以从 Action 类访问静态方法。
这不是最优雅的解决方案,但它确实有效。
You can use the ApplicationContextAware interface to have a utility class have access to the ApplicationContext.
You can then access the static method from your Action class.
Not the most elegant solution, but it works.
这是行不通的。 ContextLoaderPlugin 在 Spring 2.x 之后的任何 Spring 版本中均不可用。 Struts 1.x 与 Spring 2.x 之后的任何版本都不兼容。不可能配置 2.x 之后的任何版本的 Spring 来使用 Struts 1.x。您可能需要降级升级 Struts 的 Spring 版本。除非您使用 3.x 以上的 hibernate 版本,否则降级 Spring 可能会更容易。
This does not work. The ContextLoaderPlugin is not available in ANY version of Spring after Spring 2.x. Struts 1.x is not compatible with any version of Spring after 2.x. It is IMPOSSIBLE to configure any version of Spring after 2.x to use Struts 1.x. You would either need to downgrade your Spring version of upgrade Struts. It would probably be easier to downgrade Spring unless you're using a hibernate version past 3.x.