Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >@Autowired的使用--Spring规范解释,推荐对构造函数进行注释

@Autowired的使用--Spring规范解释,推荐对构造函数进行注释

作者头像
ydymz
发布于 2018-09-10 09:22:15
发布于 2018-09-10 09:22:15
4.2K00
代码可运行
举报
文章被收录于专栏:lgp20151222lgp20151222
运行总次数:0
代码可运行

在编写代码的时候,使用@Autowired注解是,发现IDE报的一个警告,如下:

Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies.

翻译: Spring建议,总是在您的bean中使用构造函数建立依赖注入。总是使用断言强制依赖。

那么是为什么呢?

我们可以理一下java的基础点,不考虑父类,初始化的顺序

静态变量或静态语句块–>实例变量或初始化语句块–>构造方法–>@Autowired

ps.静态变量或静态语句块的初始化顺序是自上到下的顺序,被老大问到了...

好的,有了上面的铺垫,我们来看看下面的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Autowired
private User user;
private School school;

public UserServiceImpl(){
    this.school.id = user.getSchoolId();
}

由于java先执行构造方法,导致

this.school = user.getSchool();

报空指针异常(虽然这个例子正常人都不会这样写...

解决办法就是使用构造器注入了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private User user;
private String schoolId;

@Autowired
public UserServiceImpl(User user){
    this.user = user;
    this.schoolId = user.getSchoolId();
}

而且若是你是个单例的模式(bean没写@scope,默认为单例,

那么spring还建议你在bean的声明上加final,这个的解析就简单粗暴了。

因为加上final只会在程序启动的时候初始化一次,并且在程序运行的时候不会再改变。

官方的建议例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    private final EnterpriseDbService service;

    @Autowired
    public EnterpriseDbController(EnterpriseDbService service) {
       this.service = service;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-06-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
@Autowired的使用:推荐对构造函数进行注释
Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies".
java架构师
2019/06/13
2.1K0
@Autowired:构造函数注入和变量注入
public TestController(TestService testService) {
chenchenchen
2019/09/03
5.7K0
spring中的Bean (@Bean、@Configuration和@TestConfiguration)
bean在spring中可以理解为一个对象。理解这个对象需要换一种角度,即可将spring看做一门编程语言,@Bean是spring语言声明对象的标识。
平凡的学生族
2019/05/25
2.1K0
@Autowired注解你真的会用吗?Spring官方有话说
和阿里编码规范推荐似的,Spring团队推荐又来了:总是在您的bean中使用构造函数建立依赖注入。总是使用断言强制依赖”。
JavaEdge
2020/04/28
6.5K0
@Autowired注解你真的会用吗?Spring官方有话说
@Autowired注解你真的会用吗?Spring官方有话说:Always use constructor based dependency injection in your beans
和阿里编码规范推荐似的,Spring团队推荐又来了:总是在您的bean中使用构造函数建立依赖注入。总是使用断言强制依赖”。
JavaEdge
2020/05/27
2.1K0
@Autowired注解你真的会用吗?Spring官方有话说:Always use constructor based dependency injection in your beans
@Autowired依赖注入为啥不推荐了
这几天更新升级了一下java编码神器IDEA,升级完进行日常开发,可能是以前用的IDEA版本比较老旧,升级之后发现之前的日常写法有了个warning提醒。来看图:
botkenni
2022/09/07
1.6K0
@Autowired依赖注入为啥不推荐了
@Autowired报Field injection is not recommended的解决办法
静态变量或静态语句块 –> 实例变量或初始化语句块 –> 构造方法 -> @Autowired 的顺序
九转成圣
2024/04/10
1920
@Autowired报Field injection is not recommended的解决办法
Spring @Autowired 注解静态变量
通过日志我们可以非常明确的知道上面异常的主要原因就是因为 VisaRepository 这个变量没有初始化,简单来说就是没有被 @Autowired 上去。
HoneyMoose
2022/08/27
5360
Spring @Autowired 注解静态变量
Spring为什么建议构造器注入?
本章的内容主要是想探讨我们在进行Spring 开发过程当中,关于依赖注入的几个知识点。感兴趣的读者可以先看下以下问题:
Java旅途
2021/07/13
1.7K0
踩坑:Spring静态变量/构造函数注入失败(注入为null)问题的解决方案
因为@PostConstruct注解修饰的方法加在顺序在构造方法之后静态变量赋值之前,所以可以通过该注解解决静态变量属性值注入失败问题:
玖柒的小窝
2021/12/11
1.4K0
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑
各位小伙伴大家好,我是A哥。如果问:Java的三大特性是什么?你顺口就能答出:封装、继承、多态。如果继续问:你真的了解Java中的继承吗?
YourBatman
2022/05/06
1K0
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑
@Autowired的这些骚操作,你都知道吗?
最近review别人代码的时候,看到了一些@Autowired不一样的用法,觉得有些意思,特定花时间研究了一下,收获了不少东西,现在分享给大家。
Bug开发工程师
2021/08/24
1.1K0
@Autowired的这些骚操作,你都知道吗?
Spring中@Autowired和@Resource的区别
最近有非常多的小伙伴从大厂毕业了,导致招聘也卷得相当厉害,不管是应届生、中开、高开,都会问技术原理。还经常问一些日常开发不太需要了解的知识点对比。今天,就给大家分享一个应届生被问到的一道面试题,在Spring中,@Autowired注解和@Resource注解的区别。
Tom弹架构
2022/08/22
3320
Spring中@Autowired和@Resource的区别
Spring 中 @Autowired 和 @Resource 的区别
@Autowired注解是由Spring提供的,它可以用来对构造方法、成员变量及方法参数进行标注,它能够根据对象类型完成自动注入,代码如下。
程序猿DD
2023/08/09
2450
Spring 中 @Autowired 和 @Resource 的区别
因为这个bug,我被同事鄙视了
当UserServiceImpl这个类被初始化的时候,会同时创建类中的对象userInfoMap
燃192
2023/02/28
3640
因为这个bug,我被同事鄙视了
Spring注解-@Autowired注解使用
首先要知道另一个东西,default-autowire,它是在xml文件中进行配置的,可以设置为byName、byType、constructor和autodetect;比如byName,不用显式的在bean中写出依赖的对象,它会自动的匹配其它bean中id名与本bean的set**相同的,并自动装载。 @Autowired是用在JavaBean中的注解,通过byType形式,用来给指定的字段或方法注入所需的外部资源。 两者的功能是一样的,就是能减少或者消除属性或构造器参数的设置,只是配置地方不一样而已。 autowire四种模式的区别
SerMs
2022/04/11
1K0
Spring注解-@Autowired注解使用
Spring IOC基于XML管理Bean(二)
注意:在使用 <context:property-placeholder> 元素加载外包配置文件功能前,首先需要在 XML 配置的一级标签 <beans> 中添加 context 相关的约束。
鱼找水需要时间
2023/06/11
4990
Spring IOC基于XML管理Bean(二)
了解这些,你就可以在Spring启动时为所欲为了
Spring 是一个控制反转依赖管理的容器,作为 Java Web 的开发人员,基本没有不熟悉 Spring 技术栈的,尽管在依赖注入领域,Java Web 领域不乏其他优秀的框架,如 google 开源的依赖管理框架 guice,如 Jersey web 框架等。但 Spring 已经是 Java Web 领域使用最多,应用最广泛的 Java 框架。
码哥字节
2021/01/14
1.2K0
CTO 说了,用错 @Autowired 和 @Resource 的人可以领盒饭了
来源:https://juejin.cn/post/6844904064212271117
好好学java
2021/07/05
5170
为什么 Spring和IDEA 都不推荐使用 @Autowired 注解
原因详情描述: Inspection info: Spring Team recommends: "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies". 译为: Spring 团队建议: 始终在您的 bean 中使用基于构造函数的依赖注入。始终对强制依赖项使用断言
时间静止不是简史
2022/04/02
1.7K0
为什么 Spring和IDEA 都不推荐使用 @Autowired 注解
推荐阅读
相关推荐
@Autowired的使用:推荐对构造函数进行注释
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验