2011-12-07 91 views
4

我有一個應用程序與struts2.2和彈簧3.1,我想禁用春天autowire。 我GOOGLE了一下,發現我必須把<beans>標籤default-autowire="no",但這似乎並不奏效。禁用彈簧autowire

然後我發起我可以每<bean>這樣的標籤聲明這樣的:<bean autowire="no">,但這似乎並不奏效。

在i啓用調試彈簧記錄我可以看到很多AOF這樣的消息:

INFO:DEBUG [HTTP線程池-8080(3)](ConstructorResolver.java:739) - 自動裝配經由構造函數豆從bean的名字 'com.common.actions.PopupAction' 類型命名爲 'intermedService'

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

爲什麼春天試圖autowire這個動作,只要我在這裏定義了依賴關係,我定義了auto-wire="no"

或者這條消息告訴我,接線是通過構造函數類型(我想要的)和「自動裝配的類型」意味着從4個參數他匹配intermedService與我的變量intermed服務的類型(而不是按順序或者是其他東西)?

回答

5

默認情況下,Struts 2 Spring插件將自動裝配設置爲「名稱」。目前我不認爲插件允許「無」作爲價值,但你可以嘗試使用「自動」 - 我懷疑這不會有幫助,因爲它仍然是一個自動裝配的bean工廠。

這已經提前;我不記得任何真正的決議。我再次提出它,看看它是否可以在下一個版本中解決,我們正在進行一些重要的清理。

編輯還有struts.objectFactory.spring.autoWire.alwaysRespect常量,默認爲false;嘗試將其設置爲true。我不記得布爾型的意義是什麼,或者它是否具有效果 - 現在正在尋找它。

+0

嗨戴夫,似乎不管我做什麼汽車導線總是在:)。我會讓這一刻成爲現實。也許在下一個版本的struts-spring插件中,我們將能夠禁用此行爲 –

1

解決它的一種方法(直到它被修復)就是不同的方式命名你的字段/構造函數參數和你的bean ,所以春天無法與他們相匹配。