Spring boot provides @ComponentScan
to find packages to be scanned.
I am building a library which has @RestControllers
inside with package com.mylib.controller
. There are other classes as well with stereotype annotations in different packages.
So, if some one is developing SpringBoot Application with com.myapp
base package.
He uses my library in his application. He need to mention @ComponentScan("com.mylib")
to discover stereotype components of library.
Is there any way to scan components without including library package in @ComponentScan
?
As spring-boot-starter-actuator expose its endpoints just with dependency, without defining @ComponentScan
. OR any default package which is scanned regardless of application base package.
You could create a Spring Boot Starter in the same style as the Spring Provided Starters. They are essentially a jar'd library with a a spring.factories
file pointing to the @Configuration
class to load with some other annotations on there to provide overriding/bean back off (@ConditionalOnMissingBean
) and generally provide their own @ConfigurationProperties
.
Stéphane Nicoll provided an excellent demo of how to build one.
https://github.com/snicoll-demos/hello-service-auto-configuration
It is also documented in the Spring Boot documentation. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html
The library approach would also work but I see no benefit in not making it a starter. Additionally for any library/starter I'd recommend dropping the @ComponentScan
and just defining the beans in a @Configuration
. This will work for sterotypes like @RestController
etc. will function as normal if you create an @Bean
out of it in a configuration.