@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 ...
随机推荐
- 源码下载:74个Android开发开源项目汇总
1. ActionBarSherlock ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所 ...
- TensorFlow 分布式实践
此wiki主要介绍分布式环境使用的一些条件,一直所要注意的内容: 确保在此之前阅读过TensorFlow for distributed 1.集群描述 当前tensorflow 的版本(0.8.0), ...
- Java的类的详解
首先呢,我承认上一次我理解的有误. 1.构造方法的作用:是初始化一个对象,而不是成员变量,它和get和set方法都有给成员变量赋值的功能. 2.下来说一下JVM调用main方法的过程: a.静态变量赋 ...
- composer 报错:Failed to decode response: zlib_decode(): data error 解决办法
执行命令 composer require particle/validator 报错 Failed to decode response: zlib_decode(): data error 网上推 ...
- Vue小案例 之 商品管理------创建页面与部分数据
logo的路径: 页面的初始布局: 初始的HTML: <div id="container"> <!--logo title--> <div clas ...
- Caused by: com.rabbitmq.client.ShutdownSignalException: connection error
周五下午的时候升级了一个环境,跑了批处理sh升级脚本后,启动时报下列错误: INFO | jvm 1 | 2017/02/24 17:39:09 | java.io.IOException INFO ...
- http 请求头大小写的问题
如果是默认消息头名称,消息头格式已经固定,即便输入的大小写有误,也会给你翻译成默认的写法,如果自己定义的,会自动给你翻译成小写,所以传参数的名称都用小写字母即可,否则可能取不到值,比如encrypte ...
- C++进程间通信之剪贴板
转载:http://blog.csdn.net/hk627989388/article/details/53693636 转载:http://blog.csdn.net/heihei36/articl ...
- javascript对文件的读写
整合了一下网上对于js实现文件读写的代码,但是该功能只能在ie浏览器下执行,另外有些电脑上的ie需要设置. 下面是写入代码: var fso = new ActiveXObject("Scr ...
- topcoder srm 490 div1
problem1 link 首先每$n*m$一定是一个循环,所以只需要考虑时间$[0,n*m-1]$即可.这个期间一共出现了$n$个,第i个的出现时间为$m*i$,离开的时间为$\left \lcei ...