@Autowired的使用--Spring规范解释,推荐对构造函数进行注释
一
在编写代码的时候,使用@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.静态变量或静态语句块的初始化顺序是自上到下的顺序,被老大问到了...
三
好的,有了上面的铺垫,我们来看看下面的代码。
@Autowired
private User user;
private School school; public UserServiceImpl(){
this.school.id = user.getSchoolId();
}
由于java先执行构造方法,导致
this.school = user.getSchool();
报空指针异常(虽然这个例子正常人都不会这样写...
解决办法就是使用构造器注入了
private User user;
private String schoolId; @Autowired
public UserServiceImpl(User user){
this.user = user;
this.schoolId = user.getSchoolId();
}
四
而且若是你是个单例的模式(bean没写@scope,默认为单例,
那么spring还建议你在bean的声明上加final,这个的解析就简单粗暴了。
因为加上final只会在程序启动的时候初始化一次,并且在程序运行的时候不会再改变。
官方的建议例子
private final EnterpriseDbService service; @Autowired
public EnterpriseDbController(EnterpriseDbService service) {
this.service = service;
}
@Autowired的使用--Spring规范解释,推荐对构造函数进行注释的更多相关文章
- @Autowired的使用:推荐对构造函数进行注释
在编写代码的时候,使用@Autowired注解是,发现IDE报的一个警告,如下: Spring Team recommends "Always use constructor based d ...
- Spring官方都推荐使用的@Transactional事务,为啥我不建议使用!
GitHub 17k Star 的Java工程师成神之路,不来了解一下吗! GitHub 17k Star 的Java工程师成神之路,真的不来了解一下吗! GitHub 17k Star 的Java工 ...
- Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范与推荐标准
Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范与推荐标准 1. 界面gui方面的前后端分离重大意义1 2. 业务逻辑也适当的迁移js化1 3. 常用分离方法2 3.1. 页面 ...
- 你可能使用了Spring最不推荐的注解方式
前言 使用Spring框架最核心的两个功能就是IOC和AOP.IOC也就是控制反转,我们将类的实例化.依赖关系等都交由Spring来处理,以达到解耦合.利用复用.利于测试.设计出更优良程序的目的.而对 ...
- spring/spring boot/spring cloud书籍推荐
最近看了一些spring书籍,主要都是工作需要,实话说,没有必要买这么多书,每个主题一本就足够了,其他的补充可以通过项目实战和上网看官网或者博客补充. 说是推荐,其实只是一些简单读后感想而已,每本书都 ...
- Action中如何通过@Autowired自动注入spring bean ?
1.讲Action纳入spring的IOC控制 <!-- 采用注解方式自动扫描装配 --> <context:component-scan base-package="co ...
- new出来的对象无法调用@Autowired注入的Spring Bean
@Autowired注入Spring Bean,则当前类必须也是Spring Bean才能调用它,不能用new xxx()来获得对象,这种方式获得的对象无法调用@Autowired注入的Bean. 1 ...
- Spring Taco Cloud——Controller的创建(含SpringMVC执行过程&SpringBoot&Spring三者解释及关联)
在记录这次控制器编写前,对于Spring的感觉就是经常提这样代码好简洁,这样好方便,这个是用来干嘛的诸如之类的话. What is Spring ?这是我想问自己的,一直认为是简化代码利于工程的开源框 ...
- 注意:Spring Boot 2.7开始spring.factories不推荐使用了,接下来这么玩...
如果你是Spring Boot用户的话,一定有这样的开发体验,当我们要引入某个功能的时候,只需要在maven或gradle的配置中直接引入对应的Starter,马上就可以使用了,而不需要像传统Spri ...
随机推荐
- web.xml中:<context-param>与<init-param>的区别与作用及获取方法
<context-param>的作用: web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件w ...
- SpringMVC前置控制器SimpleUrlHandlerMapping配置
1. <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5&qu ...
- 《精通Spring4.X企业应用开发实战》读后感第五章(注入参数详解)
- Elasticsearch中提升大文件检索性能的一些总结
笔者在实际生产环境中经常遇到一些大文件的检索,例如一些书籍内容,PDF文件等.今天这篇博客主要来探讨下如何提升ES在检索大文件的一些性能,经验有限,算是一个小小的总结吧! 1.大文件是多大? E ...
- Centos 6.5 下Nginx安装部署https服务器
一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩.1.选定源码目录选定目录 /usr/local/cd /usr/local/2.安装PCRE库cd /usr/ ...
- 附近wifi都是你的
今天给大家介绍deauth攻击. 最终效果:附近你指定的任何wifi,别人都无法连接,即便连接上的也会断掉. 由于我在 “世界虽大,但没有破不了的wifi” 这篇文章中写的很详细,所以我在这里就步详 ...
- Pure CSS 的网格布局(比bootstrap小很多且易扩展的css UI)
(转自百度经验)http://jingyan.baidu.com/article/48a42057c44fdba9242504dd.html Pure是一个简单.实用的CSS框架,鉴于目前网上对pur ...
- UNPIVOT逆透视以及动态逆透视存储过程
前几天一直练习PIVOT透视,还实现了动态透视的存过程<动态透视表>https://www.cnblogs.com/insus/p/10888277.html 今天练习MS SQL Ser ...
- 如何快速编写大项目的Makefile文件
在构建C++的后台服务时,经常需要自己来编写makefile文件,而如果没有合适的方法或模板时,编写makefile文件是一件很费时费力的事情.因此,为了帮助程序员高效准确的编写makefile文件, ...
- unite2017《Unity企业级支持案例与分析》
在今天举办的Unite2017开发者大会上,Unity大中华区技术支持总监张黎明以"Unity企业级支持案例与分析"为主题进行了分享. 以下为演讲实录: 张黎明:非常感谢大家来参加 ...