常见的三种注解注入方式对比
发布网友
发布时间: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是另一...