Какой умный способ организовать классы в Spring 3 для компонентного сканирования? - PullRequest
7 голосов
/ 05 августа 2011

Я начал работу над новым проектом, используя Spring 3, и я использую аннотации.Мне нравится, что я могу подключить свои классы, чтобы вводить зависимости, но я знаю, что это плохая практика - запускать context:component-scan с базового пакета.

Я использую DispatcherServlet, который имеет свой собственныйXML-файл конфигурации.В этом тоже context:component-scan.Когда я впервые начал изучать Spring, у меня было частичное совпадение при сканировании компонентов, и бины создавались несколько раз.Я бы хотел этого избежать.

Какой хороший способ организовать сканирование моих пакетов или компонентов для охвата всех компонентов без дублирования?

В настоящее время у меня есть такие пакеты:

my.package.controller
my.package.dao
my.package.entity
my.package.service
my.package.util

Если у меня есть bean-компоненты во всех этих пакетах, то кажется, что самым простым способом было бы поместить <context:component-scan base-package="my.package"></context:component-scan> в applicationContext.xml и покончить с этим.

Было бы этолучше сканировать my.package.controller в xml диспетчера, а остальные (кроме my.package.controller) в applicationContext.xml?

Или я должен расположить все свои аннотированные классы в одной области, а все остальное в другой?Примерно так:

my.package.spring.controller
my.package.spring.dao
my.package.spring.entity
my.package.spring.service
my.package.spring.util
my.package.notannotated
my.package.notannotated2

Я использую @Autowired, чтобы добавить ведение журнала в большинство, если не во все мои классы, поэтому я не знаю, что у меня будут классы, которые не будут аннотированы.

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

Спасибо!

1 Ответ

12 голосов
/ 05 августа 2011

Да - в вашем основном контексте сканировать все, кроме контроллеров

 <context:component-scan base-package="my.package">
    <context:exclude-filter type="regex" expression="my\.package\.controller.*"/>
 </context:component-scan>

и в контексте DispatcherServlet просто просканируйте пакет контроллера.

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