Проблемы с дублированием в Spring Autowire - PullRequest
0 голосов
/ 01 августа 2010

При попытке автоматически связать JdbcUserDetailsManager из Spring Security я использую следующее заявление в appcontext.xml (находится отдельно от веб-приложения):

 <bean class="org.springframework.security.provisioning.JdbcUserDetailsManager">
    <property name="dataSource" ref="dataSource"/>                                                                
</bean>

При запуске юнит-теста все в порядке. При запуске моего веб-приложения, которое имеет собственный appcontext.xml, включая оригинальный appcontext.xml, я получаю двойную ошибку:

No unique bean of type 
    [org.springframework.security.provisioning.JdbcUserDetailsManager] is defined:   
        expected single matching bean but found 2: 
    [org.springframework.security.provisioning.JdbcUserDetailsManager#0, 
        org.springframework.security.provisioning.JdbcUserDetailsManager#1]

Как я могу уточнить два файла appcontext.xml, чтобы одновременно запустить и тесты сервисного уровня, и веб-приложение?

Ответы [ 2 ]

6 голосов
/ 01 августа 2010

Зачем вам нужно включать JdbcUserDetailsManager в контекст вашего веб-приложения / сервлета? WebApplicationContext получает основной ApplicationContext в качестве родительского «автоматически» (если вы правильно настроили его). См. эту статью IBM , где приведен пример настройки contextConfigLocation, чтобы веб-приложение знало, где найти основной ApplicationContext.

Или этот пример: contextConfigLocation /WEB-INF/main-application-config.xml

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>mine</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/web-application-config.xml</param-value>
        </init-param>
    </servlet>
1 голос
/ 01 августа 2010

Не могли бы вы определить идентификатор bean-компонента и использовать аннотацию @Qualifier для различения двух, одного в вашем тестовом классе и одного в реальном коде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...