Использование @ComponentScan или <context: component-scan /> только с одним классом
Я поддерживаю проект с двумя наборами основных пакетов, проект использует Spring и Spring MVC, один из этих пакетов содержит несколько контроллеров и сканируется с использованием конфигурации XML (<context:component-scan />
).
Проблема в том, что в другом пакете есть один класс (не сканированный), и мне нужно, чтобы этот класс сканировался, но только этот класс и ничего больше в пакете. Я не могу изменить его пакет сейчас, потому что это было бы слишком рискованно сейчас.
Так есть ли способ сделать это с помощью аннотаций или XML?
3 ответа
Просто добавьте это как боб в ваш контекст, например
<bean class="my.package.MyClass" />
Что @Bart сказал для XML.
Если вам нужно добавить этот класс с помощью аннотаций, добавьте следующее в один из ваших @Configuration
классы
@ComponentScan(
basePackageClasses = YourClass.class,
useDefaultFilters = false,
includeFilters = {
@ComponentScan.Filter(type = ASSIGNABLE_TYPE, value = YourClass.class)
})
В дополнение к методу, описанному Emerson Farrugia, существует менее подробное решение, которое поддерживается начиная с Spring Framework 4.2, как упомянуто в документации здесь.
Начиная с Spring Framework 4.2,
@Import
также поддерживает ссылки на классы обычных компонентов, аналогичныеAnnotationConfigApplicationContext.register
метод. Это особенно полезно, если вы хотите избежать сканирования компонентов, используя несколько классов конфигурации в качестве точек входа для явного определения всех ваших компонентов.
Таким образом, ваш пример просто стал бы:
@Import(YourClass.class)
Вам нужно использовать фильтры, чтобы отфильтровать другие классы и просто включить ваш класс, который вы хотите отсканировать
<context:component-scan base-package="com.abc" >
<context:include-filter type="regex"
expression="com.abc.customer.dao.*DAO.*" />
</context:component-scan>