1、问题分析
在实际的开发中,我们经常需要将自己负责的公共代码封装为一个sdk,提供给其他同事使用。
但是如果我们的包和使用者自己业务的包不同路径,那么,
使用者就需要通过@componentScan注解扫描我们自己的sdk包路径才能将我们sdk包中的类装载到IOC容器中。
可是我们在使用其他第三方的包时,也无需手动扫描第三方的包。他们是如何做到的呢?
以spring-boot-admin为例:
spring-boot-admin
spring boot admin 的包路径是de.codecentric,可是我们在使用springbootadmin时并没有在自己的项目上去手动扫描这个包,其中原因在于springbootadmin项目定义了一个starter包,starter包下META-INF目录下定义了文件spring.factories。spring.factories文件中通过配置自动导入了包:de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration
而SpringBootAdminClientAutoConfiguration中通过@Bean注解注入了相应的类
所以我们可以参考这样的方式,也让自己的sdk可以实现自动扫描包的效果
2、项目实例
例如我们的项目usercenter,所在的包为com.usercenter
那么我们只需要在sdk的resources目录下建文件夹META-INF文件,添加文件spring.factories,然后填写配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration = com.usercenter.UserCenterSDKAutoConfiguration
UserCenterSDKAutoConfiguration代码:
@Configuration
@ComponentScan(value = "com.usercenter")
public class UserCenterSDKAutoConfiguration {
}
如此即可!
网友评论