如何将旧的 Struts 应用程序与 Spring 3.x 集成

发布于 2024-11-04 10:54:48 字数 72 浏览 4 评论 0原文

我想知道如何以及什么是将 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

泪痕残 2024-11-11 10:54:48

使用ContextLoaderPlugin并将struts控制器设置为processorClass“<像这样的 href="http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/web/struts/AutowiringRequestProcessor.html">AutowiringRequestProcessor" (在struts-config.xml中):

<controller>
    <set-property property="processorClass" value="org.springframework.web.struts.AutowiringRequestProcessor" />
</controller>

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" value="/WEB-INF/config/action-servlet.xml"/>
</plug-in>

action-servlet.xml必须是一个空的bean上下文文件:

<beans></beans>

将以下init参数添加到web.xml中的ActionServlet:

<init-param>
    <param-name>autowire</param-name>
    <param-value>byName</param-value>
</init-param>

只需编写常规的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):

<controller>
    <set-property property="processorClass" value="org.springframework.web.struts.AutowiringRequestProcessor" />
</controller>

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" value="/WEB-INF/config/action-servlet.xml"/>
</plug-in>

action-servlet.xml has to be an empty beans context file:

<beans></beans>

Add the following init parameter to the ActionServlet in web.xml:

<init-param>
    <param-name>autowire</param-name>
    <param-value>byName</param-value>
</init-param>

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).

沉默的熊 2024-11-11 10:54:48

使用 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.

青萝楚歌 2024-11-11 10:54:48

您可以使用 ApplicationContextAware 接口让实用程序类能够访问 ApplicationContext。

public class SpringUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext = null;

    public static Object getSpringBean(String beanName) {
        return applicationContext.getBean(beanName);
    }

    public void setApplicationContext(ApplicationContext appContext)
        throws BeansException {
        applicationContext = appContext;
   }
}

然后您可以从 Action 类访问静态方法。

public class MyAction extends LookupDispatchAction {
    private MyService getMyService() {
        return (MyService) SpringUtil.getSpringBean("myService");
    }
}

这不是最优雅的解决方案,但它确实有效。

You can use the ApplicationContextAware interface to have a utility class have access to the ApplicationContext.

public class SpringUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext = null;

    public static Object getSpringBean(String beanName) {
        return applicationContext.getBean(beanName);
    }

    public void setApplicationContext(ApplicationContext appContext)
        throws BeansException {
        applicationContext = appContext;
   }
}

You can then access the static method from your Action class.

public class MyAction extends LookupDispatchAction {
    private MyService getMyService() {
        return (MyService) SpringUtil.getSpringBean("myService");
    }
}

Not the most elegant solution, but it works.

〆一缕阳光ご 2024-11-11 10:54:48

这是行不通的。 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文