Использование компонентного сканирования в веб-проекте - PullRequest
2 голосов
/ 06 мая 2011

У меня есть Eclipse «Динамический веб-проект» и сервер Tomcat, настроенный в Eclipse для использования этого проекта. У меня есть расширение файла, сопоставленное сервлету, и в конфигурации сервлета у меня есть настройка компонента scan-element, подобная этой:

<context:component-scan base-package="com.mycompany.web" />

Когда мой веб-сервер запускается, я вижу это сообщение об ошибке в журнале:

May 6, 2011 9:50:23 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet cap
java.lang.IllegalArgumentException: Resource path [C:\...\src\main\webapp\WEB-INF\classes\com\mycompany\web] does not denote a directory

Этот каталог не существует (за исключением упакованного .war-файла). Однако пакет com.mycompany.web существует.

Есть ли другой способ сделать компонентное сканирование? Нужно либо заглянуть в другую папку, либо как-то найти ее в моем проекте или что-то в этом роде ...

Ответы [ 2 ]

1 голос
/ 19 июля 2011

можно делать то, что вы хотите, но вам нужно немного больше настроек.

Вы можете аннотировать свои классы с помощью @Controller или @Repository или других аннотаций стереотипов Spring, и Spring автоматически их подбирает.

Или вы можете дать context:component-scan немного больше информации. Пример:

<context:component-scan base-package="com.mycompany.web">
    <!-- scan all classes in the com.mycompany.web package (but
         not in subpackages) -->
    <context:include-filter type="aspectj" expression="com.mycompany.web.*"/>


    <!-- or if you want to include subpackages this config scans all
         classes in com.mycompany.web.special and in its subpackages
         (that's what the ..* means) -->
    <context:include-filter type="aspectj" expression="com.mycompany.web.special..*"/>
</context:component-scan>

Наконец, если вам не нравится использовать aspectj, context: include-filter type может быть регулярным выражением, пользовательской аннотацией и т. Д. См. эту ссылку для получения дополнительной информации.

1 голос
/ 09 мая 2011

По-видимому, невозможно выполнить компонентное сканирование таким образом.Он создает список каталогов, что, я думаю, невозможно, если файлы классов физически не находятся там, где ожидает Spring.Я решил эту проблему, просто не используя компонентное сканирование, и перечислив контроллеры в конфигурации Spring следующим образом:

<context:annotation-config />
<bean class="com.mycompany.web.MyController"/>

Аннотации в контроллере все еще работают, поэтому перечисление контроллеров вручную - единственный дополнительный шаг.

...