问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

常见的三种注解注入方式对比

发布网友 发布时间:2022-10-03 10:53

我来回答

1个回答

热心网友 时间:2023-10-10 04:48

java

field 注入方式是使用最多的,原因是这种方式使用起来非常简单,代码更加简洁。

java

在 Spring 3.x 刚推出的时候,Spring 官方在对比构造器注入和 Setter 注入时,推荐使用 Setter 方法注入:

Spring 3.x Constructor-based or setter-based DI?

意思是说,当出现很多注入项的时候,构造器参数可能会变得臃肿,特别是当参数时可选的时候。Setter 方式注入可以让类在之后重新配置和重新注入;

java

Spring 4.x 的时候,Spring 官方在对比构造器注入和 Setter 注入时,推荐使用构造器注入方式:

Spring 4.x Constructor-based or setter-based DI?

因为使用构造器注入方式注入的组件 不可变 ,且保证了需要的依赖 不为 null 。此外,构造器注入的组件总是能够在 完全初始化的状态 返回给客户端(调用方);对于很多参数的构造器说明可能包含了太多了职责,违背了单一职责原则,表示代码应该重构来分离职责到合适的地方。

在对比 Setter 方法注入和 构造器注入的时候 分别引用的 Spring 官方文档的第二段阐述了除推荐方式的另一种方式的特点。

在 Spring 3.x 的时候 Spring 推荐 Setter 方法注入,第二段表示:一些纯粹主义者喜欢基于构造函数的注入。提供所有对象依赖项意味着对象总是在完全初始化状态下返回给客户机(调用)代码。缺点是对象不太容易重新配置和重新注入。

在 Spring 4.x 的时候 Spring 推荐构造器注入,第二段表示:Setter 注入应该主要用于可选的依赖项,这些依赖项可以在类中分配合理的默认值。否则,必须在代码使用依赖项的任何地方执行非空检查。setter 注入的一个好处是,setter 方法使该类的对象能够在以后重新配置或重新注入。

Setter 注入 应该被用于可选依赖项。当没有提供它们时,类应该能够正常工作。在对象被实例化之后,依赖项可以在任何时候被更改。

构造器注入 有利于强制依赖。通过在构造函数中提供依赖,您可以确保依赖对象在被构造时已准备好被使用。在构造函数中赋值的字段也可以是final的,这使得对象是完全不可变的,或者至少可以保护其必需的字段。

构造器注入还可以避免 Field 注入 的循环依赖问题,比如 在 Alpha 中注入 Beta,又在 Beta 中注入 Alpha。如果使用构造器注入,在 Spring 启动的时候就会抛出 BeanCurrentlyInCreationException 提醒循环依赖。

参考:

https://docs.spring.io/spring-framework/docs/3.1.x/spring-framework-reference/html/beans.html#d0e2778

https://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/beans.html#beans-constructor-injection

https://www.vojtechruzicka.com/field-dependency-injection-considered-harmful/

https://www.cnblogs.com/zhangshuaiyin/p/15035887.html

常见的三种注解注入方式对比

在 Spring 3.x 的时候 Spring 推荐 Setter 方法注入,第二段表示:一些纯粹主义者喜欢基于构造函数的注入。提供所有对象依赖项意味着对象总是在完全初始化状态下返回给客户机(调用)代码。缺点是对象不太容易重新配置和重新注入。在 Spring 4.x 的时候 Spring 推荐构造器注入,第二段表示:Setter 注入应...

spring三种依赖注入方式(spring实现依赖注入的几种方式)

spring的IOC有三种注入方式第一是根据属性注入也叫set方法注入;第二种是根据构造方法进行注入;第三种是根据注解进行注入,这种方式我认为比较好,方便,要是bean多的话,使用前两种方式会使得配置文件过于臃肿。1接口注入(interfaceinjection)接口注入指的就是在接口中定义要注入的信息,并通过接口完成注入...

bean对象的三种注入方式(bean对象的三种注入方式有哪些)

spring的IOC有三种注入方式第一是根据属性注入也叫set方法注入;第二种是根据构造方法进行注入;第三种是根据注解进行注入,这种方式我认为比较好,方便,要是bean多的话,使用前两种方式会使得配置文件过于臃肿。如果项目稍微大一些,用aop的话会很好维护。spring,action整合问题,关于spring的属性注入1、而...

依赖注入的三种实现方式(依赖注入的三种实现方式区别)

4、依赖注入:本质就是对类中的变量进行赋值操作!spring使用注解标注类,spring容器通过包扫描注解,将这些标注了spring注解的类管理起来。spring依赖注入通常有哪些实现方式,列举并分别进行说明。1、Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解...

bean对象的三种注入方式?

5、Setter注入:对于习惯了传统javabean开发的程序员,通过setter方法设定依赖关系更加直观。如果依赖关系较为复杂,那么构造子注入模式的构造函数也会相当庞大,而此时设值注入模式则更为简洁。6、Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的...

Bean和注入Bean的几种常用注解和区别

Spring 声明Bean的注解:Component: 组件,没有明确的角色。Service : 在业务逻辑层(Service层)使用。Repository: 再数据访问层(Dao层)使用。Controller: 再展现层(MVC->Spring MVC)使用。Spring 注入Bean的注解:Autowired:Spring提供的注解。inject:JSR-330提供的注解。Resource:JSP-250提供的...

Spring中依赖注入的四种方式(spring依赖注入有哪些实现方式)

spring依赖注入有几种方式注入就有这三种方法 接口注入(不推荐)getter,改则setter方式注入(比较常用)这个就是依赖注搏祥入 构造器注入(死的应基歼搏用)写出spring基于xml注入的几种方式?1.构造器注入:通过在类的构造器中传入依赖对象来完成依赖注入。2.Setter方法注入:通过在类中定锋轿义setter...

spring有几种注入方式?

2、spring的IOC有三种注入方式第一是根据属性注入也叫set方法注入;第二种是根据构造方法进行注入;第三种是根据注解进行注入,这种方式我认为比较好,方便,要是bean多的话,使用前两种方式会使得配置文件过于臃肿。3、接口注入:接口注入模式因为历史较为悠久,在很多容器中都已经得到应用。但由于其在灵活...

spring的三种注入方式是什么?

接口注入:接口注入模式因为历史较为悠久,在很多容器中都已经得到应用。但由于其在灵活性、易用性上不如其他两种注入模式,因而在 IOC 的专题世界内并不被看好。Setter 注入:对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。如果依赖关系较为复杂,那么构造子注入模式的构造...

Spring Bean的作用域、条件注解和@Import方式注入

关于@Import注解的三种使用方式,它们提供了一种简洁高效地将多个Bean添加到Spring容器中的方法。方式一通过@Import直接指定需要注入的Bean类。方式二和方式三则通过实现ImportSelector或ImportBeanDefinitionRegistrar接口,自定义选择和注册Bean的逻辑。这为更复杂、定制化的依赖注入提供了可能。FactoryBean是另一...

spring的三种注入方式 spring注入的三种方式区别 ioc依赖注入的三种方式 sql注入的三种方式 依赖注入的四种方式 依赖注入的两种方式 spring的两种注入方式 spring常用的注入方式 依赖注入的方式有哪些
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...新南站到郑州市东明路和纬五路交叉口的肿瘤医院,最少转乘,大概多长... 合肥济民肿瘤医院到合肥汽车南站怎么坐公交车? 合肥凤凰肿瘤医院下高铁后怎么走打的大概要多少钱 什么是爱情,我又迷糊了!哎…… 三个月宝宝拉绿便便怎么回事 GB/T276-1994 圆柱滚子轴承 6311-2rs/z1 这个型号各字母所代表的意思... 6208轴承最高限速多少 为什么我在电脑上下载的photoshop软件都是花钱的,要不打不开。怎么才 ... 6204轴承是什么类型的轴承? 爱情天梯是真的吗 怎么扩大小米4c可用的运行内存,感觉手机里面软件没什么,但为什么运行内存只剩下600M左右,可以删 文竹开花为什么是臭味 文竹有什么气味? 如何第二天起床不口臭 芦荟胶的用法(芦荟胶的正确用法是什么) 中交三公局在安徽的工程有吗?具体什么位置啊? 芦荟胶的正确使用方法 你懂吗 流浪狗为什么会跟着人,被流浪狗跟着走的预兆 狗一直跟着你什么预兆 芦荟胶使用的正确方法 芦荟胶如何使用 用宛如如何造句 宛如词语造句 蛋羹汤怎样做 蛋羹汤的做法 【烘培笔记】蚵仔煎〞怎样做? 下巴长痘痘了谁知道怎么调理? 这个甲壳昆虫叫什么?哪位大神知道? 怎么更改QQ书签网址的名字? 广州大旺属于哪个区 清洁度II+什么意思啊宫颈细胞病理涂片I-II级什么意思啊,严重吗急急急急啊,谢谢! Spring里面的切面(aop)重要吗?还有Spring里面主要用到了哪几种注入方式 探望长辈送什么花 看望病人应送什么花 请问一下小黄面如何开搓饵 想问小黄面如何开搓饵 镇海是宁波的一个县吗? 镇海有几个镇 宁波镇海有多大? 爱情恋爱经典语录 干红枣有防腐剂气味是怎么会事?有防腐剂气味怎么清除? 过节回来妈妈给找出来这么多邮票和粮票,谁知道这个东西值钱么,有没 我有邮票和粮票不知道是否有价值 word字体显示大小跟实际字号不一致怎么办 word中的页面纸张大小跟实际中的纸张大小不一样,是怎么回事啊。 小米手机变成了这样,怎么回事? 小米手机虚拟功能键失灵了怎么办?全部变为菜单键功能了… 小米手机突然变成这样了,怎么办? 颈椎病的日常护理,需要注意哪些? 青春期长斑会消失吗 青春期长斑会消失不见吗