Spring自动装配@Autowired的三种方式
来源:互联网 发布:淘宝全职客服工资多少 编辑:程序博客网 时间:2024/05/16 04:11
转自:https://ahaochan.github.io/Java/JavaWeb/Spring/Spring%E8%87%AA%E5%8A%A8%E8%A3%85%E9%85%8D@Autowired%E7%9A%84%E4%B8%89%E7%A7%8D%E6%96%B9%E5%BC%8F.html
前言
在IDEA升级2017版后,发现以前使用的@Autowired
出现了个警告Field injection is not recommended
。
虽然不是异常,但就是看着不舒服,所以google了一下,发现了stackoverflow 已经有人提了这个问题,并得到了解答。
@Autowired的不推荐用法
在一个Bean内,可以使用@Autowired
注入另一个Bean。
123456789
public class Dependency(){}public class DI(){private Dependency dependency;}
事实上,这就是我平常使用的方式,直接在Field
上添加注解,简洁又好看。
但这是不推荐的使用方法。
@Autowired的三种使用方式
- 通过构造器注入
- 通过setter方法注入
- 通过field反射注入
12345678910111213141516171819
public class DI(){//通过构造器注入private DependencyA a;public DI(DependencyA a){this.a = a;}//通过setter方法注入private DependencyB b;public void setDependencyB(DependencyB b){this.b = b;}//通过field反射注入private DependencyC c;}
弊端
如果你使用的是构造器注入
恭喜你,当你有十几个甚至更多对象需要注入时,你的构造函数的参数个数
可能会长到无法想像。
如果你使用的是field反射注入
如果不使用Spring框架,这个属性只能通过反射注入,太麻烦了!这根本不符合JavaBean
规范。
还有,当你不是用过Spring
创建的对象时,还可能引起NullPointerException
。
并且,你不能用final
修饰这个属性。
如果你使用的是setter方法注入
那么你将不能将属性设置为final
。
两者取其轻
Spring3.0官方文档建议使用setter注入覆盖构造器注入。
Spring4.0官方文档建议使用构造器注入。
结论
如果注入的属性是必选
的属性,则通过构造器注入。
如果注入的属性是可选
的属性,则通过setter方法注入。
至于field注入,不建议使用。
阅读全文
0 0
- Spring自动装配@Autowired的三种方式
- @autowired自动装配的几种方式
- spring @Autowired 注解自动装配默认装配方式
- Spring的自动装配Bean的三种方式
- Spring的自动装配Bean的三种方式
- Spring中自动装配的三种方式
- spring基础-Bean的装配方式(三)自动装配
- spring自动装配@autowired,@Resource
- Spring装配bean的三种方式
- spring装配bean的三种方式
- Spring实现控制反转(IOC)的三种方式(三)——自动装配
- Spring——@Autowired注解和启动自动扫描的三种方式
- spring的Autowired,Qualifier注解介绍以及自动装配
- Spring的《注解装配》- @autowired
- Spring自动装配----注解装配----Spring自带的@Autowired注解
- Spring@Autowired注解与自动装配
- Spring@Autowired注解与自动装配
- Spring@Autowired注解与自动装配
- 逆元详解 求逆元的方法汇总
- 关于redis实现单点登录的一点思路
- oracle分页最简写法
- 安装vmware-tools,解决疑难杂症!
- c++ 常见问题
- Spring自动装配@Autowired的三种方式
- springmvc配置多视图解析器
- php异步实现,避免长时间等待
- 前端导学
- JSON的null转换成空字符串
- 如何高效学习
- android scrollview中嵌套expandablelistview
- tensorflow io 图片读取
- 避免tomcat运行过程中跳转到debug模式下