自定义 Spring Boot Starter 中的组件无法被 Spring 扫描注册
Spring Boot 大约 1217 字现象
自定义starter
包中的@Controller
、@Service
、@Component
、@Bean
等对象没有注入到Spring
容器中。
原因
主项目包com.example.project
,自定义starter
包org.group.lib
,在不同包下。
Spring Boot
项目启动时会默认扫描@SpringBootApplication
标注的类所在的子包下的路径。
解决
方法一
主项目@SpringBootApplication
中添加scanBasePackages
,包含自定义starter
包的路径。
注意:主项目的路径也必须显示指定,否则主项目的组件不会被加载,从而项目报错无法启动。
@SpringBootApplication(scanBasePackages = {"com.example.project", "org.group.lib"})
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
方法二
主项目中添加@ComponentScan
设置包含自定义starter
包中的路径。
注意:主项目的路径也必须显示指定,否则主项目的组件不会被加载,从而项目报错无法启动。
@ComponentScan(basePackages = {"com.example.project", "org.group.lib"})
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
方法三
自定义starter
包路径修改为与主项目一致,只适用于自己维护的starter
包。
注意:可能会与主项目类冲突。
方法四
starter
中定义@Configuration
,并添加@ComponentScan
。
@ComponentScan(basePackages = "org.group.lib")
@Configuration
public class TestComponentConfig {
}
spring.factories
中添加TestComponentConfig
配置。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.group.lib.config.TestAutoConfiguration, \
org.group.lib.component.TestComponentConfig
阅读 455 · 发布于 2022-10-20
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
软考-系统架构设计师:人机界面设计阅读 2086
-
软考-系统架构设计师:联邦数据库阅读 1094
-
JMeter 使用 Critical Section Controller 按顺序执行接口阅读 1620
-
Helm 安装 Chart 到 Kubernetes阅读 212
-
JavaScript 判断 Android 还是 iOS阅读 513
-
Windows 后台启动 Nginx、Redis、MongoDB、php-fpm阅读 2676
-
Java 中 Thread 的中断方法阅读 1833
-
Docker CMD ENTRYPOINT 区别阅读 867
-
Spring Boot 使用 JavaMailSender 发送邮件阅读 2653
-
Java 中 Thread 的状态阅读 1686