2010-04-14 3 views
2

Я использую @Resource аннотировать классы фасоли, @Autowired к autowire зависимостей, и в файле конфигурации Spring эти вещи: Нет фасоли под названием «...» определяется и Spring @Resource аннотацию

 
    context:component-scan base-package="package1,package2" 
    tx:annotation-driven 

Итак, это работает отлично (проверено). Spring сканирует package1, package2, классы с аннотацией @Resource , а затем я могу получить их с помощью getBean(), ЕСЛИ ИСПЫТАНИЕ ОТ КОНСОЛЬНОГО ПРИМЕНЕНИЯ [скажем, с функцией main()].

Но когда я пытаюсь использовать следующий подход (использование Spring в контейнерном управляемой среде = с Tomcat):

 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath*:beans.xml</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
    </listener> 
    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

компилировать баночку со всеми классами фасоли и поставить эту баночку в WEB-INF/Lib

то что я вижу? Я не могу getBean() любой из этих аннотированных bean-компонентов @Resource!
Весна просто не может найти их.
Тем не менее я могу getBean() beans, которые явно присутствуют в beans.xml.


В чем проблема?

+0

Не могли бы вы переформатировать свой первый фрагмент кода? – lexicore

ответ

0

Я не уверен, как он работает в автономном режиме, но элемент «" в контексте Spring позволяет использовать аннотации @Resource. Посмотрите на документ Spring для получения дополнительной информации.

+0

@ Давид М. Карр. Что вы имеете в виду, вы не уверены? Я говорю, я тестировал этот материал, в автономном режиме он отлично работает, проблема в единстве между веб-приложением и Spring. – EugeneP

+1

Я сказал, что не уверен, как он работает автономно, потому что то, что я видел, что было не так с вашей конфигурацией, не решило бы себя в автономном приложении и веб-приложении. Я также вижу, что критическая информация, которую я пытался предоставить, была устранена, потому что я не ушел от угловых скобок. Вам нужно иметь элемент «context: annotation-config». –

2

не хватает <context:annotation-config/>?

<context:annotation-config/>  
<context:component-scan base-package="package1"/> 
<context:component-scan base-package="package2"/> 
<tx:annotation-driven transaction-manager="transactionManager" /> 

or 

<context:annotation-config/>  
<context:component-scan base-package="package1, package2"/> 
<tx:annotation-driven transaction-manager="transactionManager" /> 
Смежные вопросы