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

How Spring is injecting properties in Struts actions, that are not defined in applicationContext.xml

我在一个项目中有像 Spring 3 + Struts 2 + Hibernate 3 这样的框架。它还使用 spring 安全性。

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

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

有几个服务 classes 通常进行数据库调用。像 agentserviceprocess 就是这样一种 class 具有像 getAgents().

这样的方法

Struts 操作对于每个进程都有一个 属性 和 setter getter,这些进程 classes 被定义为 [=19= 中的 bean ].

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


此外, 我找到了以下条目

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

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

加载此插件时,应用插件的配置以使用其自己的对象工厂来实例化操作 类。

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

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