自定义 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: 3,551 · Posted: 2022-10-20
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...