Использование @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>
Другие вопросы по тегам