SpringBootTest常见错误解决

1.启动类所在包错误

问题

由于启动类所在包与需要自动注入的类的包不在一个包下:

启动类所在包:

com.exmaple.test_02

但是对于需要注入的类却不在com.exmaple.test_02下或者其子包下,就会导致启动类无法扫描到该类,从而无法对该类进行管理,因此无法自动注入。

需要自动注入的类所在包: com.example.algotithm

解决方案

方案一:将需注入类的包移动到启动类包下

方案二:为启动类增加该类的路径扫描,从而让spring管理该类

@ComponentScan(basePackages = "com.example")

将com.exmaple下的所有添加了@Component,@Controller,@Service,@Repository等注解的类注册到容器中。

为什么需要在启动类所在包或者所在包的子包?

查看SpringBootApplication源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
  xxxx
}

我们可以看见注解中有@ComponentScan注解

@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

其中一个功能就是检查是否应用了 @ComponentScan 注解。(就是解决方案二中的配置)

如果使用就按照你配置的,没有就按照默认的

而如果按照默认的,那么就会 扫描当前包以及子包,将有@Component,@Controller,@Service,@Repository等注解的类注册到容器中。

因此为了不必要的问题,我们一般将启动类放到最外层,以便扫描所有类。

2.没有为类注解/没有添加自动注入注解

没有为类添加**@Component,@Controller,@Service,@Repository等注解**

添加注解即可

3.依赖未导入

如果项目分为多个module,而启动类所在的module,没有引入所需要的module(假定为A包),就会导致无法注入A包中的类。

多层结构演示:

测试类需要创建在启动类所在的module下:

此时需要对domain下的一个功能做测试,需要将所用到的类所在的module作为依赖引入。

相关推荐
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
Miketutu2 小时前
Spring MVC消息转换器
java·spring
小小虫码3 小时前
项目中用的网关Gateway及SpringCloud
spring·spring cloud·gateway
计算机-秋大田4 小时前
基于微信小程序的电子竞技信息交流平台设计与实现(LW+源码+讲解)
spring boot·后端·微信小程序·小程序·课程设计
customer087 小时前
【开源免费】基于SpringBoot+Vue.JS景区民宿预约系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
带刺的坐椅8 小时前
无耳科技 Solon v3.0.7 发布(2025农历新年版)
java·spring·mvc·solon·aop
精通HelloWorld!11 小时前
使用HttpClient和HttpRequest发送HTTP请求
java·spring boot·网络协议·spring·http
LUCIAZZZ12 小时前
基于Docker以KRaft模式快速部署Kafka
java·运维·spring·docker·容器·kafka
拾忆,想起12 小时前
如何选择Spring AOP的动态代理?JDK与CGLIB的适用场景
spring boot·后端·spring·spring cloud·微服务
鱼骨不是鱼翅14 小时前
Spring Web MVC基础第一篇
前端·spring·mvc