отключить пружину автопровода - PullRequest
4 голосов
/ 08 декабря 2011

У меня есть приложение с Struts2.2 и Spring 3.1, и я хочу отключить Spring AutoWire.Я немного погуглил и обнаружил, что мне нужно поставить на <beans> tab default-autowire="no", но это, похоже, не работает.

Тогда я считаю, что могу объявить это для каждого тега <bean>например: <bean autowire="no">, но, похоже, это тоже не работает.

Когда я включил регистратор отладки пружины, я вижу много таких сообщений:

ИНФОРМАЦИЯ: ОТЛАДКА[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"?

Или это сообщение говорит мне, что проводка была сделана по типу через конструктор (как я хотел), а «Автопроводка по типу» означает, что из 4-х параметров он сопоставил intermedService с моей переменной intermed service по типу (а не по порядку или чему-то еще)еЛСЭ)?

Ответы [ 3 ]

5 голосов
/ 08 декабря 2011

Плагин Struts 2 Spring по умолчанию устанавливает автоматическое подключение в «name».В настоящее время я не верю, что плагин допускает значение «none» в качестве значения, но вы можете попробовать использовать «auto» - я подозреваю, что это не поможет, поскольку это все еще фабрика bean-компонентов с автопроводкой.

Это имеетвоспитывался раньше;Я не помню никакого реального разрешения.Я снова поднял его, чтобы посмотреть, можно ли решить его в следующем выпуске, где мы проводим значительную очистку.

Редактировать Есть также константа struts.objectFactory.spring.autoWire.alwaysRespect, которая по умолчанию равна false;попробуйте установить его на true.Я не помню, какое значение логического значения означает что, или, если оно имеет эффект, - взглянуть на него сейчас.

1 голос
/ 08 декабря 2011

Способ обойти это (до тех пор, пока он не будет исправлен) - просто по-разному именовать аргументы вашего поля / конструктора и ваши bean-компоненты, чтобы Spring не мог их сопоставить.

0 голосов
/ 08 декабря 2011

Я считаю, что default-autowire = "no" включено по умолчанию.то есть, если вы не укажете default-autowire, это означает default-autowire = "no".Попробуйте установить autowire -андидат = "ложь", если вы не хотите, чтобы этот компонент был автоматически подключен http://static.springsource.org/spring/docs/2.5.x/reference/beans.html

...