【问题标题】:how dependencies are injected in struts2 action with spring?如何使用spring在struts2动作中注入依赖项?
【发布时间】:2012-06-14 08:08:32
【问题描述】:

我有一个基于 struts2 的旧版 Web 应用程序(主要使用注释)。在调试时,我发现所有依赖项(如服务层和 dao 层) 在struts 2动作中自动注入。我期待必须在struts.xml 中定义一些弹簧拦截器,它必须这样做。

但是我在那里没有找到任何与 spring 相关的拦截器。同样在web.xml 中,我没有找到任何必须从事此类工作的相关内容。 我不确定如何在 struts2 动作中注入依赖项(使用 spring)...

我可以在类路径中看到struts2-convention-plugin-2.2.3.1.jar 文件。这是否意味着filterDispatcher 在运行时查找此 jar,如果找到,则在操作中注入依赖项。在此过程中是否有任何拦截器也有帮助?

【问题讨论】:

  • 我们能看到配置示例,以及注入依赖项的对象示例吗?
  • 所以你说你的 web.xml 中没有定义 spring 监听器?
  • @fmucar 我在 web.xml 中看到了 ContextLoaderListener,它读取了针对 web.xml 中的参数 contextConfigLocation 参数给出的 xam 文件。但这只会实例化单例 bean,而不是原型或请求范围。正确的?要在行动中注入原型 bean,必须通过拦截器或插件来完成?
  • 你有struts2-spring-plugin作为你的依赖吗?是struts2+spring集成的一种方式。您的应用可能正在使用一些自定义解决方案。侦听器管理所有 spring bean,但它仍然需要在某些时候拦截操作才能注入依赖项。向我们展示一些配置
  • @MSach:你能找到struts2-spring-plugin,因为这个插件负责将控制权交给Spring DI

标签: java spring struts2


【解决方案1】:

请参考struts2-spring-plugin-x.x.x.x.jarstruts-plugin.xml,你可以找到关于对象工厂和自动装配拦截器的配置。它使用了 struts2 的插件功能,您可以在 Struts 指南中搜索“插件”以获取详细信息。

【讨论】:

  • 沉是对的。 ObjectFactory 负责创建 Struts2 使用的所有动作、拦截器、结果和类型转换器。默认情况下,Struts2 使用反射来创建这些对象,但是 Spring 和 Guice 的插件允许这些框架创建对象。
【解决方案2】:

如果依赖注入是用 spring 完成的,请查看spring plugin

如果没有,struts2 有自己的Dependency Injection Implementation
看看Core Developers Guide

【讨论】:

    【解决方案3】:

    必须有一个拦截器..在动作类之前执行,并使用Java反射API..或Struts 2反射工具..http://struts.apache.org/2.3.4/进行依赖注入struts2-plugins/struts2-convention-plugin/apidocs/org/apache/struts2/convention/ReflectionTools.html 检查拦截器堆栈。

    【讨论】:

    • rajesh 我可以在类路径中看到 struts2-convention-plugin-2.2.3.1.jar 文件。这是否意味着 filterDispatcher 在运行时查找此 jar,如果找到,则在操作中注入依赖项。对吗?在此过程中是否有任何 Interceptor 也有帮助?
    猜你喜欢
    • 2013-01-17
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多