Отключить пружину автопровода
У меня есть приложение с Struts2.2 и Spring 3.1, и я хочу отключить Spring AutoWire. Я немного погуглил и обнаружил, что должен поставить на <beans>
табуляция default-autowire="no"
, но это не похоже на работу.
Тогда я считаю, что я могу объявить это для каждого <bean>
пометить как это: <bean autowire="no">
, но это, похоже, тоже не работает.
Когда я включил регистратор весенней отладки, я вижу много сообщений вроде этого:
ИНФОРМАЦИЯ: DEBUG [http-thread-pool-8080(3)] (ConstructorResolver.java:739) - Автоматическая передача по типу от имени компонента '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>
почему Spring пытается автоматически связать это действие, если я определил здесь зависимость вручную и определил auto-wire="no"
?
Или это сообщение говорит мне, что проводка была сделана по типу через конструктор (как я хотел), и "Autowiring by type" означает, что из 4-х параметров он сопоставил intermedService с моей переменной intermed service по типу (а не по порядку или что-то еще)?
3 ответа
Плагин Struts 2 Spring по умолчанию устанавливает автоматическое подключение к имени. В настоящее время я не верю, что плагин допускает "none" в качестве значения, но вы можете попробовать использовать "auto" - я подозреваю, что это не поможет, так как это все еще фабрика бинов с автопроводкой.
Это было поднято раньше; Я не помню никакого реального разрешения. Я снова поднял этот вопрос, чтобы посмотреть, можно ли решить его в следующем выпуске, где мы проводим значительную очистку.
Там же есть struts.objectFactory.spring.autoWire.alwaysRespect
константа, которая по умолчанию false
; попробуйте установить его на true
, Я не помню, какое значение логического значения означает что, или, если оно имеет эффект, - взглянуть на него сейчас.
Способ обойти это (до тех пор, пока он не будет исправлен) - просто по-разному именовать аргументы вашего поля / конструктора и ваши bean-компоненты, чтобы Spring не мог их сопоставить.
Я считаю, что default-autowire="no" включено по умолчанию. то есть, если вы не укажете default-autowire, это означает, что default-autowire="no". Попробуйте установить autowire -андидат = "ложь", если вы не хотите, чтобы этот компонент был автоматически подключен http://static.springsource.org/spring/docs/2.5.x/reference/beans.html