SpringBoot 自动扫描第三方包及spring.factories失效的问题
为什么会找不到
Spring 依赖注入 就是要让spring找到要注入的类 并且识别到了 @Component、@Service 等注解。
1. 当在开发的第三方包里写明了 @Component、@Service 等等
2. 引入了包,不论第三方库的引入,还是本地jar。总之是要引入到工程的
这时候还加入不到 IOC 容器,那就说明SpringBoot工程没有扫描到这些类。
解决方法
1. componentScan 或者SpringBootApplication(scanBasePackages= )
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.gradlespringbootdemo","com.example.gradlespringboottest"})
public class GradleSpringbootTestApplication {
public static void main(String[] args) {
SpringApplication.run(GradleSpringbootTestApplication.class, args);
}
SpringBootApplication 是个三合一的注解,其中就包含了ComponentScan 。本身是要默认扫描范围的,手动加入ComponentScan后,默认就失效了。要手动加回来
2. 写自动配置类
这种方法的原理与上一个其实是一样的,实际作用还是在目标上加入了componentScan 的扫描注解
3. spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.gradlespringbootdemo.service.TestService\
AbcClass\
DefClass
当开发第三方包时,可以使用这种方法。这样使用这个包的springboot工程就可以自动扫描到了。其实就时springboot启动时会扫描依赖jar包下的这个路径的spring.factories文件。这个文件可以写很多配置,例如Listener等。
如上代码将需要被扫描的类都写进去。
spring.factories 失效
这是版本问题,新的版本不再支持spring.factories文件了。改为上图中一长串那样的写法 即 META-INF\spring\org.springframework.boot.autoconfigure.EnableAutoConfiguration.imports这样,就是把原来的配置单独形成文件,直接把要扫描的类写进这个文件就可以了,每行写一个,像这样
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了