问题概述

在项目开发过程中,使用基于字段变量的依赖注入(通过注解@Autowired进行注入)时(据大部分人在通常情况下都是使用@Autowired进行注入操作的)出现一个黄色警告下划线,提示 “ field injection is not recommended ”,作为一个现代的老码畜也看得很不爽,如下图:

解决办法

首先,我们需要了解三种常用的依赖注入方式:

基于构造器的依赖注入
基于Setter的依赖注入
基于字段变量的依赖注入

(当然还有其它不常用的注入方式:静态工厂方法注入、动态工厂方法注入)

各个依赖注入的实现方式:

构造器注入:

    private final InventoryMapper inventoryMapper;public InventoryController(InventoryMapper inventoryMapper) {this.inventoryMapper = inventoryMapper;}

Setter注入:

    private InventoryMapper inventoryMapper;public void setInventoryMapper(InventoryMapper inventoryMapper) {this.inventoryMapper = inventoryMapper;}

字段变量注入:

字段变量注入是基于注解实现的,即@Resource或者@Autowired,

    @Autowiredprivate InventoryMapper inventoryMapper;

@Autowired:表示自动注入,自动从spring的上下文找到合适的bean来注入

@Resource:表示按指定名称注入,@Resource 可以通过 byName 和 byType的方式注入, 默认先按 byName的方式进行匹配,如果匹配不到,再按 byType的方式进行匹配。 当然,还可以为 @Service和@Resource 添加 name 这个属性来区分不同的实现。

@Component:表示一种泛指,被标记类即组件,Spring扫描注解配置时,会标记这些类要生成对应的bean。

@Qualifier和@Autowired配合使用,当一个接口有多个实现的时候,@Qualifier的value定了具体调用哪个类的实现(需要在实现类中通过@Service来表示每个不同的bean),也就是说指定了注入bean的名称。

Controller、Service、、Repository分别作用类是控制层类、业务层类、数据访问层类,Spring扫描注解配置时,会标记这些类要生成对应的bean。

@Autowired和@Resource是用来修饰字段,构造函数,或者方法,其作用是注入bean。而@Service,@Controller,@Repository,@Component则是用来修饰类,标记这些类要生成bean。

基于字段变量的依赖注入:

优点:基于字段变量的依赖注入方式非常简洁,没有任何多余代码,有效的提高了Java的简洁性。

缺点:不能指明具体的依赖。可能会遇见依赖注入的对象为null,所以这种方式过于依赖注入容器,当没有启动整个依赖容器时,这个类就不能运转,在反射时无法提供这个类需要的依赖。

如果使用基于Setter的依赖注入方式,它是一种选择性注入,可有可无的,即使没有注入这个依赖,也不会影响整个项目的运行。
如果基于构造器的依赖注入方式,它是一种强制性的,显示的注入。通过显示指明依赖注入来保证整个项目的运行。

对依赖注入的理解:
首先了解关于注入的两个概念IOC(控制反转)和DI(依赖注入),简单的说,IoC是一种思想,而DI则是一种行为。也可以说IoC是目的,DI是手段。IoC是指让生成类的方式由传统方式(new)反过来,开发程序时不需要调用new,当需要使用某个类的时候由框架来注入(DI)即可。

好了,上面关于依赖注入的知识就介绍到这儿吧,回归到问题!

关于 “ field injection is not recommended  ” 这个问题,其实不影响使用的,可以不必理会,

Spring 官方使用的注解方式:

如果只想代码简洁,只想使用@Autowired基于字段变量的依赖注入

终极解决办法:

Settings->Editor->Inspections->Spring->Spring Core->Core->Field Injection warning将Severity属性值改为 “ No highlighting,only fix ” 如下图:

修改完成后,如下图:

参考文献:

【spring-framework5.3.4docs】

【spring-guides】


好了,关于 field injection is not recommended 的解决办法  就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者: 华    仔
联系作者: who.seek.me@java98k.vip
来        源: CSDN (Chinese Software Developer Network)
原        文: https://blog.csdn.net/Hello_World_QWP/article/details/116119502
版权声明: 本文为博主原创文章,请在转载时务必注明博文出处!

field injection is not recommended 的解决办法相关推荐

  1. @Autowired注解警告Field injection is not recommended

    在使用spring框架中的依赖注入注解@Autowired时,idea报了一个警告 大部分被警告的代码都是不严谨的地方,所以我深入了解了一下. 被警告的代码如下: @Autowired UserDao ...

  2. 使用@Autowired注解警告Field injection is not recommended

    From: https://blog.csdn.net/zhangjingao/article/details/81094529 在使用spring框架中的依赖注入注解@Autowired时,idea ...

  3. idea 如何关闭 field injection is not recommended 警告

    idea中有很多代码检查机制,比如命名是否遵循驼峰规则,是否有冗余代码,是否有魔法值等等,在依赖注入时,直接使用@Autowired注解进行注入时,可能会出现黄色小波浪线,提示你:field inje ...

  4. Spring依赖注入提示:Field injection is not recommended

    前言 1.介绍 今天在调试代码,发现IDEA提示@Autowired为警告(如上图所示),信息为:Field injection is not recommended.什么意思,Spring官方给的说 ...

  5. idea中Field injection is not recommended提示

    前言:最近intellij升级后,原本在类中注入的属性都提示Field injection is not recommended 在idea的设置中,使用属性值注入这个警告提示是可以在idea中取消的 ...

  6. Field injection is not recommended的原因探解

    本章的内容主要是想探讨我们在进行 Spring 开发过程当中,关于依赖注入的几个知识点.感兴趣的读者可以先看下以下问题: @Autowired,@Resource,@Inject 三个注解的区别 当你 ...

  7. Error creating bean with name ‘XXX‘: Injection of autowired dependencies failed解决办法

    springMVC 中的采坑呀 项目结构如图 增加了workFlow 这个文件夹,里面添加的东西都没有报错,但是启动报错,提示dao层不存在,不注意的话都会出现这个问题 请查看自己的配置文件,appl ...

  8. 开发过程遇到的问题及解决办法集锦

    开发中会不断遇到各种问题,每次都是在搜索引擎和尝试中把问题解决,随着时间推移,之前解决过的问题总是会再次出现,而面临解决的时候,办法和方案有可能是忘记的,毕竟每天要写和学的东西太多了,没办法每个都仔细 ...

  9. 【Field xx in xxx.xx.xx required a bean of type ‘xx.xx.xx‘ that could not be found】排查和解决办法

    解决springboot启动报以下错误的解决办法 问题现象 解决办法 总结 Field testMapper in com.micro.test.TestServiceImpl required a ...

最新文章

  1. 「杂谈」旷视科技新产品监视学生上课不是什么好事儿
  2. python自学书籍推荐豆瓣-【转】如果有人让你推荐Python技术书,请让他看这个列表...
  3. 浅析ASP.NET页面缓存的几点体会
  4. 了解回归:迈向机器学习的第一步
  5. 9 月 19 日,腾讯云安全中心监测到  Apache Tomcat 修复了2个严重级别的漏洞, 分别为: 信息泄露漏洞(CVE-2017-12616)、远程代码执行漏洞(CVE-2017-12615
  6. python都可以开发什么_Python的优势到底是什么?Python都能开发什么?
  7. 访问母版页控件、属性、方法及母版页中调用内容页的方法
  8. python如何用c语言表示_python如何调用c语言
  9. CS231n 课程笔记翻译
  10. factory setup 序列号_麻烦哪位大侠帮我把改一下setup factory 中生成16位注册码的脚本,(在线等)急!!!...
  11. windows service (三)打包安装服务
  12. 泰拉瑞亚云服务器的搭建
  13. python最终目标_Python晋级之路-工欲善其事必先利其器
  14. 用“法外狂徒”理解C++中的引用
  15. APP的缓存文件到底应该存在哪?
  16. 微型计算机题,微机课练习题
  17. input 输入数字而且最大为10
  18. dnf最新地图编号2020_DNF2020跨区表-DNF2020跨区介绍_牛游戏网攻略
  19. Airoha SDK UT软件分辨真假洛达1562A,洛达1562a怎么鉴别?
  20. 前端入门知识整理(1)Vscode使用

热门文章

  1. 小白C语言——分离数位
  2. 美しい女の子が一言作者弗不安
  3. T(n) = 25T(n/5)+n^2的时间复杂度,笔试啊笔试!
  4. 绿色包装社会化大循环是大势所趋
  5. Memory Map
  6. ESP8266-Arduino编程实例-TCS34725颜色传感器驱动
  7. 阿里P8资深架构师耗时一年整理Java工程师成神之路
  8. CS:GO官方封禁超304000作弊帐号;任天堂疑似开发工具、源代码等机密数据泄露;Valorant上线全新处罚功能已修改
  9. 骨架图的模拟js实现
  10. redshift mysql_MySQL 数据导入到 Redshift