@Autowired 警告 Field injection is not recommended Spring @Autowired注入
问题:
一. 在IDEA升级2017版后,发现以前使用的 @Autowired 出现了个警告 Field injection is not recommended。
@Autowired的三种使用方式
1 @Service("accountEmailService") 2 public class AccountEmailServiceImpl implements AccountEmailService{ 3 4 5 /** 通过构造器注入---begin **/ 6 private JavaMailSender javaMailSender; 7 8 @Autowired 9 public AccountEmailServiceImpl(JavaMailSender javaMailSender){ 10 this.javaMailSender = javaMailSender; 11 } 12 /** 通过构造器注入---end **/ 13 14 /** 通过set方法注入---begin **/ 15 private JavaMailSender javaMailSender; 16 @Autowired 17 public void setJavaMailSender(JavaMailSender javaMailSender){ 18 this.javaMailSender = javaMailSender; 19 } 20 /** 通过set方法注入---end **/ 21 22 /** 通过field注入 **/ 23 @Autowired 24 private JavaMailSender javaMailSender; 25 26 @Override 27 public void sendMail(String to, String subject, String htmlText) throws Exception{ 28 29 String systemMail = "xxx@qq.com"; 30 31 MimeMessage msg = javaMailSender.createMimeMessage(); 32 33 MimeMessageHelper messageHelper = new MimeMessageHelper(msg); 34 35 messageHelper.setFrom(systemMail); 36 messageHelper.setTo(to); 37 messageHelper.setSubject(subject); 38 messageHelper.setText(htmlText); 39 // messageHelper.setText(htmlText,true); 40 41 javaMailSender.send(msg); 42 } 43 44 }
弊端
-
如果你使用的是构造器注入
恭喜你,当你有十几个甚至更多对象需要注入时,你的构造函数的参数个数可能会长到无法想像。
-
如果你使用的是field反射注入
如果不使用Spring框架,这个属性只能通过反射注入,太麻烦了!这根本不符合JavaBean规范。
还有,当你不是用过Spring创建的对象时,还可能引起NullPointerException。
并且,你不能用final修饰这个属性。 -
如果你使用的是setter方法注入
那么你将不能将属性设置为final。
两者取其轻
- Spring3.0官方文档建议使用setter注入覆盖构造器注入。
- Spring4.0官方文档建议使用构造器注入。
结论
- 如果注入的属性是必选的属性,则通过构造器注入。
- 如果注入的属性是可选的属性,则通过setter方法注入。
- 至于field注入,不建议使用。
hello world!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix