自定义 Spring Boot Starter 中的组件无法被 Spring 扫描注册
Spring Boot About 1,217 words现象
自定义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
Views: 2,211 · Posted: 2022-10-20
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...