解决springboot报错找不到自动注入的service问题
springboot报错找不到自动注入的service
找了不少资料,最后发现是每个service接口(虽然已经使用了@service注解)的实现类都需要加上@service注解。
如果是使用junit生成的测试类,发现无法自动注入服务的话
在test启动类前加上
@RunWith(SpringRunner.class) @SpringBootTest @ComponentScan("com.XXX.service")
这是因为test包和启动类不在同一个包或子包下,无法自动注入
Springboot Service不被识别
根据以往经验,在Mapper接口没有添加注解的情况下,Service中自动注入的Mapper都会报红,这次没有报红就知道会出错,然后测试的时候果不其然报错了。
之所以没有报红是因为service类没有被识别,就是@Service没有被扫描,所以应该是扫描路径出了问题。
具体原因
在Springboot的启动类上添加@ComponentScan
@SpringbootApplication是一个复合注解,它中包含了:@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解。
@ComponentScan是组件扫描注解,它默认扫描的是当前包及以下用来扫描@Controller @Service @Repository这类被标记的类。
错误原因:
我的分布式项目中,路径如下:
xxx.xxx.modle
xxx.xxx.mapper
xxx.xxx.service
xxx.xxx.web
启动类在web目录下,因此@ComponentScan默认扫描路径是xxx.xxx.web
因为web与modle、mapper、service在同一级别下所以无法扫描到@Service注解。
解决方法
方法一
将启动类移动到上一级目录。
方法二
自己定义扫描路径,写法如下:
//注解写法:三种方法效果类似,都是指定扫描路径 @ComponentScan("xxx.xxx") @ComponentScan(value = "xxx.xxx") @ComponentScan(basePackages = "xxx.xxx")
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
SpringBoot集成shiro,MyRealm中无法@Autowired注入Service的问题
网上说了很多诸如是Spring加载顺序,shiroFilter在Spring自动装配bean之前的问题,其实也有可能忽略如下低级错误. 在ShiroConfiguration中要使用@Bean在ApplicationContext注入MyRealm,不能直接new对象. 道理和Controller中调用Service一样,都要是SpringBean,不能自己new. 错误方式: @Bean(name = "securityManager") public SecurityManager
-
解决Springboot @Autowired 无法注入问题
特别提醒:一定要注意文件结构 WebappApplication 一定要在包的最外层,否则Spring无法对所有的类进行托管,会造成@Autowired 无法注入. 1. 添加工具类获取在 Spring 中托管的 Bean (1)工具类 package com.common; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionE
-
SpringBoot中的main方法注入service
一.SpringBoot中的main方法注入service 在springboot中使用main方法常规无法注入service,因为以后也可能会有这种情况,所以采取工具类的方式进行,该工具类为固定写法,直接复制就行 @Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext = null; @O
-
解决SpringBoot 测试类无法自动注入@Autowired的问题
原来的测试类的注解: @RunWith(SpringRunner.class) @SpringBootTest 一直没法自动注入,后来在@SpringBootTest, 加入启动类Application后就可以了 @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) 补充:spring boot项目单元测试时,@Autowired无法注入Service解决方式 首先确认: 测试类所在包名要和启动类一致
-
详解SpringBoot 解决拦截器注入Service为空问题
一.自定义拦截器实现 HandlerInterceptor 接口 /** * * Created by zhh on 2018/04/20. */ public class MyInterceptor implements HandlerInterceptor { @Autowired private NetworkProxyInfoService networkProxyInfoService; @Override public void afterCompletion(HttpServlet
-
解决springboot报错找不到自动注入的service问题
springboot报错找不到自动注入的service 找了不少资料,最后发现是每个service接口(虽然已经使用了@service注解)的实现类都需要加上@service注解. 如果是使用junit生成的测试类,发现无法自动注入服务的话 在test启动类前加上 @RunWith(SpringRunner.class) @SpringBootTest @ComponentScan("com.XXX.service") 这是因为test包和启动类不在同一个包或子包下,无法自动注入 Sp
-
springboot+mybatis报错找不到实体类的问题
目录 springboot+mybatis报错找不到实体类 找不到实体类的错误可能有很多,接下来列举几个地方 springboot+mybatis 找不到实体类问题 No qualifying bean of type‘com.wj.bfsh.mapper.SysUserMapper‘ available 问题出现在 springboot+mybatis报错找不到实体类 找不到实体类的错误可能有很多,接下来列举几个地方 启动类位置不对,启动类应该在你的service和dao 的上一层,因为Spr
-
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
报错信息 最近闲来无事,用python的tkinter库开发了一款带日程提醒的万年历桌面程序.在程序开发结束开始打包时,却发现一直报错 PyInstaller cannot check for assembly dependencies. Please install PyWin32 or pywin32-ctypes. pip install pypiwin32 但是运行pip install pypiwin32时却提示两个库都已经安装过了 可是当再运行打包脚本时就是死活无法打包,就是提示缺少
-
Golang运行报错找不到包:package xxx is not in GOROOT的解决过程
目录 1 区分几个路径 2 GO111MODULE 3 解决方案 方案一:关闭 go mod 模式 方案二:使用go mod 模式 总结 1 区分几个路径 GOROOT:Golang的安装路径,安装之后就默认自带了 GOPATH:Golang的工作目录 go_project // (go_project为 GOPATH目录)– bin // golang编译可执行文件存放路径– pkg // golang编译包时,生成的.a文件存放路径– src // 源码路径.按照golang默认约定,go
-
java报错:找不到或无法加载主类的解决方法简单粗暴
当我们在windows系统下安装完jdk时,测试案例HelloWorld:运行java命令时报错:找不到或无法加载主类 解决方法: 1.首先检查是否编译通过,生成了.class字节码文件 如果没有生成.class字节码文件,则需要执行javac编译命令编译源文件. 执行命令javac H:\javatest\HelloWorld.java(javac表示jdk内置编译命令:H:\javatest\HelloWorld.java表示源文件所在路径,这里我的测试源文件是位于H盘下,自己决定) 2.如
-
解决anaconda安装pytorch报错找不到包的问题
目录 前言 状况描述: 问题描述 解决办法: 前言 使用anaconda 命令安装pytorch包的问题,以下给出解决办法. 状况描述: 由于是第一次接触安装,看了很多篇文章,也遇到了一些坑,在此总结一下. 安装pytorch,从硬件上分为2个版本,一个是cpu,一个是gpu(显卡).gpu版本可以加速训练效果. 由于本人的电脑比较旧,显卡是rtx1050,我安装了cuda9.0版本+cudnn+pytorch(torch+torchvision) 本人安装的是gpu版本的,在这个过程中,走了一
-
springboot多模块化整合mybatis,mapper自动注入失败问题及解决
目录 springboot多模块化整合mybatis,mapper自动注入失败 问题 解决 springboot mapper注入失败的一种原因 具体情况是 解决办法 springboot多模块化整合mybatis,mapper自动注入失败 问题 启动类添加@MapperScan或@ComponentScan,mapper类添加@Mapper或@Repository ==> Consider defining a bean of type 'com.ten.mapper.UserMapper'
-
IntelliJ IDEA 报错:找不到包或者找不到符号的问题及解决方案
最近在使用IDEA的时候,突然出现过找不到包或者找不到符号的情况,在确定了自己引用存在的情况下,可以尝试以下几种方式来解决,以下是在开发过程中碰过问题同样解决过的几种办法,在此记录下也分享给大家,希望对各位有帮助. 1.利用Maven-Reimport 2.Invalidate and Restart 3.编码统一 4.重新编译 点开Project Structure 找到项目编译输出目录 将target目录下文件清空 右键项目重新build 5.利用Maven-Install 看到评
-
解决React报错Property 'value' does not exist on type EventTarget
目录 总览 正确声明类型 找出类型 总结 总览 当event参数的类型不正确时,会产生"Property 'value' does not exist on type EventTarget"错误.为了解决该错误,将event的类型声明为React.ChangeEvent<HTMLInputElement> .然后就可以通过event.target.value 来访问其值. 这里有个示例用来展示错误是如何发生的. // App.tsx function App() { //
-
解决React报错Property 'X' does not exist on type 'HTMLElement'
目录 总览 类型断言 总结 总览 在React中,当我们试图访问类型为HTMLElement 的元素上不存在的属性时,就会发生Property 'X' does not exist on type 'HTMLElement'错误.为了解决该错误,在访问属性之前,使用类型断言来正确地类型声明元素. 这里有三个例子来展示错误是如何发生的. // App.tsx import {useEffect} from 'react'; export default function App() { useEf
随机推荐
- Java8使用lambda实现Java的尾递归
- angular实现form验证实例代码
- ajaxToolkit:AccordionPane演示与应用实例
- Java final static abstract关键字概述
- iOS仿微信摇一摇动画效果加震动音效实例
- .NET实现WebSocket服务端即时通信实例
- 深入解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析
- PHP水印类,支持添加图片、文字、填充颜色区域的实现
- python语言使用技巧分享
- C语言如何利用异或进行两个值的交换详解
- 探讨:innodb与myisam在存储上有何特点和区别
- 将html页改成jsp的两种方式
- Android仿京东首页轮播文字效果
- Android 用Time和Calendar获取系统当前时间源码分享(年月日时分秒周几)
- Java的SPI机制实例详解
- Android中TextView文本高亮和点击行为的封装方法
- jquery 扑捉回车键事件代码
- select count()和select count(1)的区别和执行方式讲解
- 无耻的随机7位字符名病毒的查杀方法
- Android布局生成分享图片代码实例