0

这是我的 eventAction ActionSupport 类

public class EventAction extends ActionSupport {

    protected EventService eventService;

    protected String redirectUrl;

    public String getRedirectUrl() {
        return redirectUrl;
    }

    public void setRedirectUrl(String redirectUrl) {
        this.redirectUrl = redirectUrl;
    }

    public void setEventService(EventService services) {
        this.eventService = services;
    }
}

这是我的 applicationContext.xml 中的一个片段

<bean id ="eventService" class ="services.EventService" scope ="singleton">
        <property name = "sessionFactory" ref = "sessionFactory"/>
    </bean>

代码工作正常,除非我在声明中更改了 id。

我的问题为什么 spring <bean id ="eventService">id 必须与 EventAction 支持类中的 eventService 实例变量匹配?不id只是为将要创建的 bean 创建一个标识符吗?为什么 bean 标记内的 id 在我的 EventAction 中应该是相同的,而在配置中甚至没有提到 EventAction 类?

4

1 回答 1

0

来自 Spring 文档beans-beanname

每个 bean 都有一个或多个 id(也称为标识符或名称;这些术语指的是同一事物)。这些 id 在托管 bean 的容器中必须是唯一的。一个 bean 几乎总是只有一个 id,但如果一个 bean 有多个 id,那么多余的基本上可以被视为别名。当使用基于 XML 的配置元数据时,您可以使用“id”或“name”属性来指定 bean 标识符。'id' 属性允许您只指定一个 id,并且由于它是一个真正的 XML 元素 ID 属性,因此 XML 解析器能够在其他元素引用该 id 时进行一些额外的验证;因此,它是指定 bean id 的首选方式。但是,XML 规范确实限制了 XML ID 中合法的字符。这通常不是一个约束,

我相信对于 Spring-Struts2,您正在使用需要定义自动连线策略的插件,或者插件将使用默认的name.

这意味着当 Struts2 和 Spring 之间的插件桥接时,它将尝试根据提供的自动连接策略注入 bean

参考Struts2 Spring-plugin

于 2012-12-03T14:13:14.773 回答