4

我有一个带有 struts2.2 和 spring 3.1 的应用程序,我想禁用 spring autowire。我用谷歌搜索了一下,发现我必须放在<beans>tab default-autowire="no",但这似乎不起作用。

然后我发现我可以为这样的每个<bean>标签声明这个 : <bean autowire="no">,但这似乎也不起作用。

当我启用弹簧调试记录器时,我可以看到很多这样的消息:

信息:调试 [http-thread-pool-8080(3)] (ConstructorResolver.java:739) - 通过构造函数从 bean 名称“com.common.actions.PopupAction”按类型自动装配到名为“intermedService”的 bean

applicationConfig.xml 中的相应条目是:

<beans default-autowire="no" 
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<bean id="PopupAction" scope="prototype" class="com.common.actions.PopupAction" autowire="no">
        <constructor-arg type="com.common.services.abs.iIntermedService" ref="intermedService"/>
        <constructor-arg type="com.common.services.abs.iLocationService" ref="locationService"/>
        <constructor-arg type="com.common.services.abs.iUserService" ref="userService"/>
        <constructor-arg type="com.common.services.abs.iPhoneService" ref="phoneService"/>
    </bean>

只要我在这里手动定义了依赖项并且我定义了,为什么spring会尝试自动连接这个动作auto-wire="no"

或者此消息告诉我,接线是通过构造函数按类型进行的(如我所愿),“按类型自动装配”意味着从 4 个参数中,他将 intermedService 与我的变量中间服务按类型匹配(而不是按顺序或其他) ?

4

3 回答 3

5

Struts 2 Spring 插件默认将自动装配设置为“名称”。目前我不相信插件允许“none”作为值,但你可以尝试使用“auto”——我怀疑这不会有帮助,因为它仍然是一个自动装配 bean 工厂。

这已经被提出过;我不记得有任何真正的决议。我再次提出它,看看它是否可以在我们进行一些重大清理的下一个版本中解决。

编辑还有一个struts.objectFactory.spring.autoWire.alwaysRespect常量默认为false; 尝试将其设置为true. 我不记得布尔值的哪种含义意味着哪个,或者它是否具有效果——现在正在研究它。

于 2011-12-07T22:13:17.520 回答
1

绕过它的一种方法(直到它被修复)是只命名你的字段/构造函数参数和你的bean,以便spring无法匹配它们。

于 2011-12-08T06:56:15.427 回答
0

我相信 default-autowire="no" 默认启用。即,如果您不指定 default-autowire,则表示 default-autowire="no" 。如果您不希望此 bean 自动装配,请尝试设置 autowire-candidate="false" http://static.springsource.org/spring/docs/2.5.x/reference/beans.html

于 2011-12-08T05:44:14.563 回答