如何写业务sdk才能让使用者无需扫描包而直接使用(类似自定义starter)

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 {

}

如此即可!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容