热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot项目中使用@AutoWire注入失败问题解决

SpringBoot项目中经常使用到AutoWire注解实现自动注入,但是经常会出现自动注入失败的情况,这里汇总一下注入失败的情况,便于快

SpringBoot项目中经常使用到@AutoWire注解实现自动注入,但是经常会出现自动注入失败的情况,这里汇总一下注入失败的情况,便于快速定位错误。先上测试项目内容——

项目目录结构:

.yml文件:

test:name: roseage: 18
#端口号修改为8081
server:port: 8081

User类(使用lombok工具类,省去了get、set方法):

@Component
@ConfigurationProperties(prefix="test")
@Getter
@Setter
public class User {private String name;private String age;
}

接口:

public interface IUserService {public String getUser();
}

实现类:

@Service
public class UserService implements IUserService{@Autowiredprivate User user;@Overridepublic String getUser(){return "name:" + user.getName() + " age:" + user.getAge();}
}

控制类:

@Controller
public class UserController {@AutowiredUserService userService;@ResponseBody@RequestMapping("/test")public String test(){return userService.getUser();}
}

1.检查类上是否加了注解

自动注入的类上需要加上注解,如@Repository、@Service,需要注意的是注解需要放在实现类上,而不是接口上。


2.确认包是否被正确扫描到

springBoot项目的Bean的默认装配规则是根据Application类所在的包位置从上往下扫描。

Application类是SpringBoot项目入口类,本项目Application类所在的包为com.example.springtest1,则只会扫描com.example.springtest1包及其所有子包。若需要@Autowire注入的类(service、dao所在包)不在com.example.springtest1及其子包下,则不会被扫描。因此需要把Application类放到需要@Autowire注入的类(service、dao所在包)的上级。


3.调用者是用new创建的

比如项目中控制类UserService中存在成员变量User,User是通过@Autowired自动注入的,若控制类UserController中UserService是通过new创建的,那么自动注入就会失效。例如:

@Controller
public class UserController {
// @Autowired
// UserService userService;@ResponseBody@RequestMapping("/test")public String test(){UserService userService = new UserService();return userService.getUser();}

报错:


推荐阅读
author-avatar
琦琦蔡外_734
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有