Отключить пружину автопровода

У меня есть приложение с 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

Другие вопросы по тегам