禁用弹簧自动装配

时间:2011-12-07 21:56:42

标签: spring struts2 autowired struts2-spring-plugin

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

然后我知道我可以为每个<bean>标记声明这个:<bean autowire="no">,但这似乎也不起作用。

当我启用spring debug logger时,我可以看到很多这样的消息:

  

INFO:DEBUG [http-thread-pool-8080(3)](ConstructorResolver.java:739) - 按类型从bean名称'com.common.actions.PopupAction'通过构造函数自动装配到名为'intermedService'的bean < / p>

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

为什么只要我在这里手动定义依赖关系并定义auto-wire="no",春天会尝试自动执行此操作?

或者这条消息告诉我接线是通过类型通过构造函数(我想要的)和“按类型自动装配”意味着从4个参数中他将mediumService与我的变量中间服务匹配(而不是按顺序或别的什么)?

3 个答案:

答案 0 :(得分:5)

Struts 2 Spring插件默认将自动装配设置为“名称”。目前我不相信插件允许“无”作为值,但你可以尝试使用“自动” - 我怀疑这无济于事,因为它仍然是一个自动装配豆工厂。

之前提到过;我不记得任何真正的决议。我再次提起它,看看它是否可以在我们进行一些重要清理的下一个版本中解决。

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

答案 1 :(得分:1)

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

答案 2 :(得分: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