Если у контроллера есть аннотация @Controller, разве этого не должно быть достаточно для Spring без сканирования компонентов? - PullRequest
3 голосов
/ 05 сентября 2010

Согласно документации Spring , чтобы включить автоматическое обнаружение аннотированных контроллеров, вы добавляете компонентное сканирование в свою конфигурацию:

<context:component-scan base-package="org.springframework.samples.petclinic.web"/>

Мой вопрос: зачем это нужно?

Если у контроллера есть аннотация, уже указывающая, что это такое, разве этого не должно быть достаточно для Spring без сканирования компонентов?

Ответы [ 3 ]

5 голосов
/ 05 сентября 2010

Как еще Spring мог бы найти классы? Если вы не сказали Spring искать определенный класс или пакет, эти классы не будут загружаться, и Spring никогда не найдет их.

Это скорее ограничение модели загрузки классов Java (если вы можете назвать это ограничением), то это ограничение Spring.

3 голосов
/ 05 сентября 2010

Вам нужно только указать в вашей конфигурации следующее:

Если вы помещаете только аннотацию в свой класс, фреймворк должен был загрузить все классы, чтобы проверить, присутствует ли аннотация.

Чтобы минимизировать эти накладные расходы, вы должны поместить аннотацию:Конфиг тег в вашей конфигурации.Таким образом, фреймворк знает, что он должен проверять классы из этой конфигурации.

Вы можете помочь фреймворку, указав пакет, в котором ваши аннотированные классы находятся с атрибутом "base-package".

// РЕДАКТИРОВАНИЕ //

Это также объясняет примечание в документации :

Примечание

ищет аннотации только для компонентов в том же контексте приложения, в котором он определен.Это означает, что если вы добавите WebApplicationContext для DispatcherServlet, он будет проверять только компоненты @Autowired в ваших контроллерах, а не в ваших службах.

1 голос
/ 05 сентября 2010

Простое аннотирование класса с помощью @Controller не обязательно означает, что вы хотите, чтобы он был частью вашего контекста Spring. Представьте, является ли класс частью другого приложения, или частью сторонней библиотеки, или устаревшим компонентом вашей системы и т. Д. То, что он находится в пути к классам, не обязательно означает, что вы хотите, чтобы он автоматически создавался как бин в ваш весенний контекст.

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