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

@Autowired
UserDao userDao;

警告内容是

Field injection is not recommended

意思就是使用变量依赖注入的方式是不被推荐的。
使用idea解决策略是这样的:

Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies

意思就是总是使用构造器的方式强制注入。

依赖注入有三种方式:

变量(filed)注入
构造器注入
set方法注入
先各自看一下实现方式
变量(filed)注入

@Autowired
UserDao userDao;

构造器注入

final
UserDao userDao;@Autowired
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}

set方法注入

private UserDao userDao;@Autowired
public void setUserDao (UserDao userDao) {
this.userDao = userDao;
}

相比较而言:

优点:变量方式注入非常简洁,没有任何多余代码,非常有效的提高了java的简洁性。即使再多几个依赖一样能解决掉这个问题。

缺点:不能有效的指明依赖。相信很多人都遇见过一个bug,依赖注入的对象为null,在启动依赖容器时遇到这个问题都是配置的依赖注入少了一个注解什么的,

然而这种方式就过于依赖注入容器了,当没有启动整个依赖容器时,这个类就不能运转,在反射时无法提供这个类需要的依赖。
在使用set方式时,这是一种选择注入,可有可无,即使没有注入这个依赖,那么也不会影响整个类的运行。
在使用构造器方式时已经显式注明必须强制注入。通过强制指明依赖注入来保证这个类的运行。

另一个方面:
依赖注入的核心思想之一就是被容器管理的类不应该依赖被容器管理的依赖,换成白话来说就是如果这个类使用了依赖注入的类,

那么这个类摆脱了这几个依赖必须也能正常运行。然而使用变量注入的方式是不能保证这点的。
既然使用了依赖注入方式,那么就表明这个类不再对这些依赖负责,这些都由容器管理,那么如何清楚的知道这个类需要哪些依赖呢?它就要使用set方法方式注入或者构造器注入。

总结下:
变量方式注入应该尽量避免,使用set方式注入或者构造器注入,这两种方式的选择就要看这个类是强制依赖的话就用构造器方式,选择依赖的话就用set方法注入。

转载于:https://www.cnblogs.com/felixzh/p/10752653.html

@Autowired注解警告Field injection is not recommended相关推荐

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

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

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

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

  3. field injection is not recommended 的解决办法

    问题概述 在项目开发过程中,使用基于字段变量的依赖注入(通过注解@Autowired进行注入)时(据大部分人在通常情况下都是使用@Autowired进行注入操作的)出现一个黄色警告下划线,提示 &qu ...

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

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

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

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

  6. idea中Field injection is not recommended提示

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

  7. @autowired注解注入为null_Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案

    相信使用Mybaits的小伙伴们一定会经常编写类似如下的代码: 可以看到 userMapper 下有个红色警告.虽然代码本身并没有问题,能正常运行,但有个警告总归有点恶心.本文分析原因,并列出解决该警 ...

  8. Spring5:@Autowired注解、@Resource注解和@Service注解

    转载:http://www.cnblogs.com/xrq730/p/5313412.html 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有 ...

  9. @Autowired注解实现原理

    在讨论代码细节之前,我们再来了解下基础知识.Spring管理可用于整个应用程序的Java对象bean.他们所在的Spring容器,被称为应用程序上下文.这意味着我们不需要处理他们的生命周期(初始化,销 ...

最新文章

  1. 著名统计学家Donald B. Rubin:机器是否可以思考甚至具有意识?
  2. iis7安装mysql_windows server 2008/2012安装php+iis7+mysql环境搭建
  3. Flex中如何通过horizontalTickAligned和verticalTickAligned样式指定线图LineChart横竖方向轴心标记的例子...
  4. Jakarta Commons:巧用类和组件1
  5. Intel® oneAPI Toolkit编译VASP
  6. ASP.NET MVC 重写RazorViewEngine实现多主题切换
  7. 【数据结构-图】3.图的最短路径的几种算法(图解+演绎)
  8. Python常用模块之random模块
  9. 日常生活小技巧 -- 名词
  10. How to check firmware and drivers of a VMware ESXi host
  11. springboot项目启动rabbitmq报错org.springframework.amqp.AmqpIOException: java.io.IOException
  12. sql语句查看MySQL数据库大小
  13. Kafka:Configured broker.id 2 doesn't match stored broker.id 0 in meta.properties.
  14. 阿里云主要产品有哪些?有什么用?
  15. SQL语句 日期查询
  16. DSPE-PEG9-Mal纯度是95%以上的单分散小分子PEG试剂
  17. angular RxJs
  18. IoT黑板报:美允许4G技术与WiFi共享5G频段
  19. Jackson 泛型序列化
  20. DHCP自动分配IP

热门文章

  1. 曙光服务器2008系统,在中科曙光I620-G20服務器上安裝Windows 2008 R2 系統步驟
  2. [原创]基于frida的脱壳工具
  3. 揭开知识库问答KB-QA的面纱1·简介篇
  4. AudioRecorder 录音相关的处理流程
  5. Android 中 RegistrantList消息处理机制 以android 5.0 MT为例
  6. android 代码加view,Android中将View添加至窗口的源码分析
  7. QT串口2--控制GSM模块的使用
  8. python求均方根误差_python之MSE、MAE、RMSE的使用
  9. [转载]出了国才明白的10件事~(MITBBS ZT)
  10. hdu3549(又是最大流模板题)