@Autowired 警告 Field injection is not recommended Spring @Autowired注入
问题:
一. 在IDEA升级2017版后,发现以前使用的 @Autowired 出现了个警告 Field injection is not recommended。
@Autowired的三种使用方式
@Service("accountEmailService")
public class AccountEmailServiceImpl implements AccountEmailService{ /** 通过构造器注入---begin **/
private JavaMailSender javaMailSender; @Autowired
public AccountEmailServiceImpl(JavaMailSender javaMailSender){
this.javaMailSender = javaMailSender;
}
/** 通过构造器注入---end **/ /** 通过set方法注入---begin **/
private JavaMailSender javaMailSender;
@Autowired
public void setJavaMailSender(JavaMailSender javaMailSender){
this.javaMailSender = javaMailSender;
}
/** 通过set方法注入---end **/ /** 通过field注入 **/
@Autowired
private JavaMailSender javaMailSender; @Override
public void sendMail(String to, String subject, String htmlText) throws Exception{ String systemMail = "xxx@qq.com"; MimeMessage msg = javaMailSender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(msg); messageHelper.setFrom(systemMail);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(htmlText);
// messageHelper.setText(htmlText,true); javaMailSender.send(msg);
} }
弊端
如果你使用的是构造器注入
恭喜你,当你有十几个甚至更多对象需要注入时,你的构造函数的参数个数可能会长到无法想像。
如果你使用的是field反射注入
如果不使用Spring框架,这个属性只能通过反射注入,太麻烦了!这根本不符合JavaBean规范。
还有,当你不是用过Spring创建的对象时,还可能引起NullPointerException。
并且,你不能用final修饰这个属性。如果你使用的是setter方法注入
那么你将不能将属性设置为final。
两者取其轻
- Spring3.0官方文档建议使用setter注入覆盖构造器注入。
- Spring4.0官方文档建议使用构造器注入。
结论
- 如果注入的属性是必选的属性,则通过构造器注入。
- 如果注入的属性是可选的属性,则通过setter方法注入。
- 至于field注入,不建议使用。
@Autowired 警告 Field injection is not recommended Spring @Autowired注入的更多相关文章
- @Autowired注解警告Field injection is not recommended
在使用spring框架中的依赖注入注解@Autowired时,idea报了一个警告 大部分被警告的代码都是不严谨的地方,所以我深入了解了一下. 被警告的代码如下: @Autowired UserDao ...
- 【已解决】Field injection is not recommended和Could not autowired. No beans of 'xxx' type found.
目录 问题 解决办法 备注 问题 在项目中,我们使用Spring的@Autowired注解去引入其他类时有时候阿里的编码规约插件就会提示:"Field injection is not re ...
- IntelliJ IDEA:Field injection is not recommended
使用IntelliJ IDEA进行开发的时候,code analyze的时候会出现提示“Field injection is not recommended”. stackoverflow上有篇回答: ...
- 解决@Autowired警告
在使用spring框架中的依赖注入注解@Autowired时,idea报了一个警告 被警告的代码如下: @Autowired UserDao userDao; 警告提示信息:Field injecti ...
- 利用Lombok编写优雅的spring依赖注入代码,去掉繁人的@Autowired
大家平时使用spring依赖注入,都是怎么写的? @Servicepublic class OrderService {@Autowiredprivate UserService userServic ...
- Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理
一.spring依赖注入使用方式 @Autowired是spring框架提供的实现依赖注入的注解,主要支持在set方法,field,构造函数中完成bean注入,注入方式为通过类型查找bean,即byT ...
- Spring@Autowired注解与自动装配
1 配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...
- 【转】Spring@Autowired注解与自动装配
1 配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...
- Quartz定时器+Spring + @Autowired注入 空指针异常
在Quartz的定时方法里引用@Autowired注入Bean,会报空指针错误 解决办法: 第一种方法:(推荐,简单,亲测可行) 使用@Resource(name="指定要注入的Bean&q ...
随机推荐
- lucene 全文检索工具的介绍
Lucene:全文检索工具:这是一种思想,使用的是C语言写出来的 1.Lucene就是apache下的一个全文检索工具,一堆的jar包,我们可以使用lucene做一个谷歌和百度一样的搜索引擎系统 2. ...
- Docker学习笔记之编写 Docker Compose 项目
0x00 概述 通过阅读之前的小节,相信大家对 Docker 在开发中的应用已经有了一定的了解.作为一款实用的软件,我们必须回归到实践中来,这样才能更好地理解 Docker 的实用逻辑和背后的原理.在 ...
- php打乱数组二维数组、多维数组
//这个是针对二维数组的!下面针对多维数组的乱序方法<?php function shuffle_assoc($list) { if (!is_array($list)) return $lis ...
- Centos6下给PHP安装Qconf扩展
一.下载Qconf的zip包 1.进入github地址:https://github.com/Qihoo360/QConf,下载zip包文件,并上传至服务器二.安装QConf unzip ...
- django变量使用-在模板中使用视图函数中的变量
DTL语言,即django template language 第一次使用时,需要修改项目的setting.py文件,将其中TEMPLATES中的DIRS修改为os.path.join(BASE_DI ...
- spring boot mvc系列-静态资源配置与MappingHandler拦截器
静态资源配置 Spring Boot 默认将 /** 所有访问映射到以下目录: classpath:/static classpath:/public classpath:/resources cla ...
- ArrayList集合、String[]数组、String字符串
数组初始化时候必须指定长度,而ArrayList是动态数组,可以根据实际内容改变 //声明stsArr数组并初始化 String[] strArr = new String[]{ "aaa& ...
- metasploit(MSF)对windows的ms17-010漏洞利用
picture 配置exploit msf > use exploit/windows/smb/ms17_010_eternalblue msf exploit(windows/smb/ms17 ...
- win7 下安装使用 nginx 出现500错误
配置虚拟主机域名后访问网站出现500错误,发现是因为路径的反斜杠问题,改成正斜杠后问题解决.
- Java网络通信方面,BIO、NIO、AIO、Netty
码云项目源码地址:https://gitee.com/ZhangShunHai/echo 教学视频地址:链接: https://pan.baidu.com/s/1knVlW7O8hZc8XgXm1dC ...