Filter specific packages in @ComponentScan

You simply need to create two Config classes, for the two @ComponentScan annotations that you require.

So for example you would have one Config class for your foo.bar package:

@Configuration
@ComponentScan(basePackages = {"foo.bar"}, 
    excludeFilters = @ComponentScan.Filter(value = Service.class, type = FilterType.ANNOTATION)
)
public class FooBarConfig {
}

and then a 2nd Config class for your foo.baz package:

@Configuration
@ComponentScan(basePackages = {"foo.baz"})
public class FooBazConfig {
}

then when instantiating the Spring context you would do the following:

new AnnotationConfigApplicationContext(FooBarConfig.class, FooBazConfig.class);

An alternative is that you can use the @org.springframework.context.annotation.Import annotation on the first Config class to import the 2nd Config class. So for example you could change FooBarConfig to be:

@Configuration
@ComponentScan(basePackages = {"foo.bar"}, 
    excludeFilters = @ComponentScan.Filter(value = Service.class, type = FilterType.ANNOTATION)
)
@Import(FooBazConfig.class)
public class FooBarConfig {
}

Then you would simply start your context with:

new AnnotationConfigApplicationContext(FooBarConfig.class)

Leave a Comment