2015-06-22 5 views
6

Я использую Spring 4.16 с Java аннотаций, и я хочу сделать что-то вроде:несколько @ComponentScan весной 4?

@Configuration 
@ComponentScan(basePackages = "com.example.business", includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ServiceComponent.class)) 
@ComponentScan(basePackages = "com.example.business.framework") 
public class ServicesBaseConfiguration { 

} 

Obviusly, он не компилируется. Но я надеюсь, что вы поймете мою мысль. Я хочу иметь несколько ComponentScans с различными пакетами и фильтрами.

Я не могу объединить оба компонентаScanScan, потому что он не будет создавать какой-либо компонент из фреймворка, но те, которые аннотируются с ServiceComponent, я прав?

Вы знаете, как я могу это решить? Заранее спасибо

ответ

7

Создайте два пустых внутренних классов и поставить @ComponentScan аннотацию на них:

@Configuration 
@Import({ServicesBaseConfiguration.Filtered.class, ServicesBaseConfiguration.Unfiltered.class}) 
public class ServicesBaseConfiguration { 

    @Configuration 
    @ComponentScan(basePackages = "com.example.business", includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ServiceComponent.class)) 
    public static class Filtered {} 

    @Configuration 
    @ComponentScan(basePackages = "com.example.business.framework") 
    public static class Unfiltered {} 

} 

Это должно работать

+4

Хотя это работает, я считаю, что это временное решение. Я взял на себя смелость создать запрос об улучшении. https://jira.spring.io/browse/SPR-13151 –

+0

Спасибо вам обоим! Я принимаю ваш ответ, потому что, видимо, это единственный способ сделать это ... С уважением! – jscherman

+1

Хорошая работа @ M.Deinum! Эта функция была реализована, и наша команда использует ее счастливо :) –

Смежные вопросы