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作为依赖引入。

相关推荐
ChinaRainbowSea19 分钟前
3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)
java·spring boot·后端·spring·spring cloud·eureka
武子康43 分钟前
Java-01 深入浅出 MyBatis - MyBatis 概念 ORM映射关系 常见ORM 详细发展历史
java·数据库·sql·spring·mybatis·springboot·springcloud
晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑1 小时前
SpringCloud核心组件(三)
后端·spring·spring cloud
2402_857589361 小时前
Spring Boot框架:电商系统的技术革新
java·spring boot·后端
菠菠萝宝1 小时前
【云岚到家】-day10-2-冷热处理及统计
数据库·spring boot·spring·spring cloud·oracle·事务·xxl-job
Mike_188702783512 小时前
探索DDCA:深入理解内存架构、子系统与内存控制器
java·后端·spring
sun_star1chen2 小时前
Springboot3.3.5 启动流程之 tomcat启动流程介绍
java·spring boot·tomcat·springboot
赫萝的红苹果2 小时前
Springboot整合Prometheus+grafana实现系统监控
spring boot·grafana·prometheus
世间万物皆对象2 小时前
Spring Boot核心概念:依赖管理
java·spring boot·后端
不会飞的小龙人2 小时前
遥测数据采集工具Grafana Alloy
spring boot·grafana·日志采集·链路跟踪·alloy·otel