问题
在使用 IDEA 开发 SpringBoot 项目时,在Controller类中使用注解 @Autowired 注入一个依赖出现了警告提示。这是怎么回事?
当我们鼠标停留在警告线处会出现提示:Field injection is not recommended(不建议Field注入)
Spring Bean 的注入方式
1.变量(Field)注
@RestController
@RequestMapping(value = "/test")
public class ParkMapController{
@Autowired
private ParkMapService parkMapService;
}
优点:
代码少,简洁明了
新增依赖十分方便,不需要修改原有代码
注入简单,只需要使用 @Autowired 注解或者 @Resource 注解
缺点:
容易出现空指针异常,Field 注入允许构建对象实例的时候依赖的示例对象为空,这就导致了空指针异常无法尽早的暴露出来,因为你不调用将一直无法发现NullPointException的存在
对于IOC容器以外的环境,除了使用反射来提供它需要的依赖之外,无法复用该实现类。对单元测试不友好,如果使用 Field 注入,那么进行单元测试就需要初始化整个Spring 环境,将所有 Bean 实例化
使用field注入会出现循环依赖的隐患<