Как я могу заставить Spring идентифицировать бины без использования XML или аннотаций? - PullRequest
1 голос
/ 21 марта 2011

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

Ответы [ 4 ]

5 голосов
/ 21 марта 2011

Режим сканирования @Component для <context:component-scan> используется только по умолчанию. Вы можете настроить его поведение, используя фильтры на основе имен. См. раздел 3.10.3 руководства , например:

<beans>

   <context:component-scan base-package="org.example">
      <context:include-filter type="regex" expression=".*Stub.*Repository"/>
      <context:exclude-filter type="annotation"
                              expression="org.springframework.stereotype.Repository"/>
   </context:component-scan>

</beans>

Таким образом, вы можете заставить его обнаруживать ваши бины по соглашению об именах классов.

0 голосов
/ 21 марта 2011

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

0 голосов
/ 21 марта 2011

Согласен с Божо.

Существует обходной путь - вы можете определить свой собственный пользовательский BeanFactoryPostProcessor , где вы можете поместить логику для сканирования через классы в вашем существующем проекте на основе ваших соглашений об именах и регистрации BeanDefinitions дляклассы в вашем существующем проекте.

Да, это требует кодирования, и это не то, что вы получаете из коробки.

0 голосов
/ 21 марта 2011

3-й вариант - использование аннотаций @Configuration и @Bean и использование конфигурации контейнера на основе Java . Но затем вы пишете код для соединения ваших зависимостей и создания ваших компонентов.

...