spring-boot项目mapperBean找不到问题解决方案

使用spring-boot集成mybatis时遇到了加载不到mapper类文件bean的情况,网上找了最终终于解决了,我在这里分享一下整个排查的流程并把网上哪些方法都进行一下汇总。

错误截图:


上面这个截图是maven install的时候报出的,大概意思就是没有可用的ArticleMapper这个bean。



上面这个截图是启动boot项目时候报出的,也是说没有可用的ArticleMapper这个bean。


解决方法一:

spring-boot项目bean的创建是在启动时自动扫描创建的,默认扫描的位置是主启动类所在的包及子包。下面是我的项目结构截图,DemoApplication.java是我的主启动类,按照这个路径boot会扫描com.example下的所有文件。如果你的mapper文件所在位置不在这当中可以移过来看看问题是否解决。



解决方法二:

由于我的mapper文件在上面的路径下,所以我在主启动类文件上加入了@MapperScan("com.example.demo.mapper")注解。该注解的意思就是指定扫描mapper文件的位置,引号里是你mapper文件所在的位置。注意使用ide拷贝包路径的时候有的是使用“/”号分割的,需要改成“.”号。正常情况下你的mapper文件只要在解决方法一中正确的路径下就不会出现漏扫的情况,如果不在也可以使用这个方法去指定。



解决方法三:

仔细检查类名与自动注入时的名字是否相同。


在确定没有问题之后决定再去仔细看看错误,于是把启动报错往上拉发现还报出了找不到mapper.xml指定路径的错误。


检查配置文件中配置的路径发现确实路径写错了,这里的路径是从src/main/resources开始指定的,我这里少写了resources。加上重新clean、install,启动成功。



以上是我解决的整个流程,遇到问题还是得细心得看清楚问题得出处。不能因为看到bean没有找到就直接去纠结bean加载得问题。

### Spring 单元测试中不到 Bean解决方案 在编写 Spring 应用程序的单元测试时,如果遇到 `NoSuchBeanDefinitionException` 或者类似的异常提示不到特定类型的 Bean,则可能是由于以下几个原因造成的: #### 1. 测试类未正确配置上下文环境 为了使测试能够访问到应用程序中的各种组件和服务,通常需要通过 `@ContextConfiguration` 注解来指明所使用的配置文件位置或配置类。对于基于 Java 配置的方式来说,可以采用如下形式来进行声明[^1]: ```java @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) // 指定启动类 public class MyServiceTest { @Autowired private RestTemplate restTemplate; } ``` #### 2. 缺失必要的依赖项定义 当使用某些第三方库(如 `RestTemplate`)作为服务调用工具时,默认情况下它们可能不会被自动注册为 Spring 容器内的 Bean 实例。此时可以在主应用类或其他适当的地方显式创建这些 Bean: ```java @Configuration public class AppConfig { @Bean public RestTemplate restTemplate() { return new RestTemplate(); } } ``` 这确保了即使是在测试环境中也能正常获取所需的资源。 #### 3. 组件扫描范围设置不当 有时尽管已经提供了正确的包结构以及相应的注解标记 (@Component, @Repository 等),但由于缺少合适的扫描机制而导致部分实体未能加入到 IOC 容器之中。可以通过调整 `@SpringBootApplication` 上面的参数或者单独引入 `@ComponentScan` 来扩大查范围[^2]. #### 4. 资源路径配置有误 类似于实际运行期间可能出现的情况,在准备测试数据的过程中也可能存在因路径书写不准确而引发的问题。比如 XML 映射文件的位置不对就会造成 Mapper 接口无法初始化其对应的实现对象。因此务必确认所有外部资源配置均指向确切的目标地址,并且遵循项目的约定俗成规则[^4]. 综上所述,针对上述提到的各种可能性逐一排查并采取相应措施即可有效解决大多数关于 "不到 Bean" 的困扰。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值