Spring 如何在 Struts 动作中注入未在 applicationContext.xml 中定义的属性

Posted

技术标签:

【中文标题】Spring 如何在 Struts 动作中注入未在 applicationContext.xml 中定义的属性【英文标题】:How Spring is injecting properties in Struts actions, that are not defined in applicationContext.xml 【发布时间】:2015-04-13 02:32:40 【问题描述】:

我在一个项目中使用 Spring 3 + Struts 2 + Hibernate 3 等框架。它也使用 spring 安全性。

Spring 和 Struts 使用在 web.xml 中定义的 spring ContextLoaderListener 集成

<listener>
    <display-name>Spring Initialization</display-name>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

有几个服务类通常会调用数据库。像agentserviceprocess 就是这样一个类,它具有像getAgents() 这样的方法。

Struts 动作对每个进程都有一个属性和 setter getter,这些进程类在 application-context.xml 中定义为 bean。

令人惊讶的是,我找不到任何将动作类作为类参数的 bean。我的意思是 spring 没有控制动作对象的实例化。那么spring如何在这些action中注入服务属性对象呢?


另外, 我找到了以下条目

<filter>
    <filter-name>struts</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts</filter-name>
    <url-pattern>*.action</url-pattern>
    <url-pattern>*.htm</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

【问题讨论】:

你在struts中使用spring插件吗? 我不知道它到底是什么。但是我做了一些谷歌,在 web.xml 中找到了这个 StrutsPrepareAndExecuteFilter 条目。如果这有帮助。 【参考方案1】:

要与 Spring 集成,您应该使用 struts2-spring plugin。

当这个插件被加载时,插件的配置被应用到使用它自己的对象工厂来实例化动作类。

当构建动作实例时,它会将它们传递给 Spring 进行自动装配。

您应该为自动装配提供属性的 getter 和 setter。您还为依赖项提供了 spring 配置。

【讨论】:

这个项目的 pom.xml 文件中没有 struts2-spring-plugin。但是这个功能仍然有效。不知道怎么做。 你应该检查服务器日志信息,它会告诉你插件是否初始化,我的意思是struts-spring集成。 @anirban 为什么要部署 Struts 1 工件?! @anirban S2 和 S1 完全不同,不是简单的添加更新的库。 @anirban 如果 struts-spring 插件就位,您无需再做任何事情,因为 Struts 负责将 Spring bean 注入到动作实例中。并且不要使用 S1,即 EOL。

以上是关于Spring 如何在 Struts 动作中注入未在 applicationContext.xml 中定义的属性的主要内容,如果未能解决你的问题,请参考以下文章

多部分表单数据输入 Java 模型属性未在请求类中注入元素 - Spring Boot

struts2与spring集成时,关于class属性及成员bean自动注入的问题

Java Struts2

maven-struts2-spring maven在struts2上搭建spring,使用依赖注入的方法

struts2与spring整合问题,访问struts2链接时,spring会负责创建Action

Struts2和Spring集成