SpringBoot扫描不到组件?给你提供几种方案( 二 )
自定义starter我们使用SpringBoot之所以方便 , 得益于它的特性之一便是可以使用已经集成好的starter 。 同样 , 我们也可以自定义一套starter来达到自动化配置的效果 。
由于这种模式更适用于自动化集成某一个组件 , 并不太适合这里说的common公共项目 。 因此就不再代码演示 , 只说一下大概的思路 。 详细实例可参考我的新书《SpringBoot技术内幕:架构设计与实现原理》 。
定义starter首先需要依赖自动配置的组件 , 也就是pom文件中添加如下配置:
然后再定义具体的服务(或初始化)类 , 比如HelloWorldService以及该服务类初始化的参数类HelloWorldProperties 。 通过@ConfigurationProperties注解可以将Application中对应的属性初始化到类的属性中 。
然后呢 , 再提供一个基于@ConditionalOnClass配置的HelloWorldAutoConfiguration类 , 指定当HelloWorldService存在于类路径时 , 便会进行初始化 。
最后一步 , 在META-INF目录下创建spring.factories , 启动添加类似如下配置:
# Auto Configureorg.springframework.boot.autoconfigure.EnableAutoConfiguration=com.secbro.HelloWorldAutoConfiguration
该类是为SpringBoot提供的扫描入口 。
此时 , 当其他项目需要该starter时 , 直接引入便可注入使用HelloWorldService类了 。
关于此处建议大家专门看一篇相关的实战文章 , 可以更好的理解 。 这里只提供了一个大概的思路 。
小结关于SpringBoot的@ComponentScan基本上已经可以满足需求了 , 第二种方案是基于@ComponentScan的改进方案 。 而第三种方案更多的是基于SpringBoot的核心原理来处理的 。 当然最好是避免同一个项目使用多个顶级package 。
通过本篇文章的脉络 , 我们可以看到一种学习的方式 , 通过一个知识点或一个实战中的问题 , 可以逐步将知识从点扩充到面 , 这样不仅能加大学习的范围 , 也能构建更牢固的知识图谱 。
作者:程序新世界
原文链接:
如果觉得本文对你有帮助 , 可以转发关注支持一下
推荐阅读
- 黑鲨4宣布:120W快充加持 不到15分钟就能充满
- 拜拜扫描仪!微信打开这个功能,文档表格扫一扫秒变电子档
- 虾米音乐活跃用户一千万不到,QQ音乐、网易云音乐花式抢客
- 率先适配华为鸿蒙系统 扫描全能王助力“万物互联”
- 教你一招,把纸质证件扫描到手机变成电子档,非常清晰,永久保存
- 原来华为手机隐藏扫描仪,3种方法,纸质档几秒电子化,一学就会
- 微信十年,十年之战
- 曝iPhone 13全系标配激光雷达扫描仪 真就十三香?
- 逆转!华为腾讯握手言和?腾讯游戏已重新上架,互掐不到24时落幕,发生了什么…
- 华为手机长按屏幕2秒,打开隐藏扫描仪功能,你们用过吗?