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自动注入的问题
maven-struts2-spring maven在struts2上搭建spring,使用依赖注入的方法