`

Spring注入方式的分类和比较

 
阅读更多

构造函数注入

即通过构造函数完成依赖关系的设定。如下代码:

可以看到,在构造函数方式的依赖注入机制中,依赖关系是通过类构造函数建立,容器通过调用类的构造方法,将其所需的依赖关系注入其中。

设值注入

在各种类型的依赖注入模式中,设值注入模式在实际开发中得到了最广泛的应用。如下代码:

依赖注入模式的对比总结

一、构造注入的优势:

1、“在构造期即创建一个完整、合法的对象”,对于这条Java设计原则,该方式无疑是最好的响应者。

2、避免了繁琐的setter方法的编写,所有依赖关系均在构造函数中设定,依赖关系集中呈现,更加易读。

3、由于没有setter方法,依赖关系在构造时由容器一次性设定,因此组件在被创建之后即处相对“不变”的稳定状态,无需担心上层代码在调用过程中执行setter方法对组件依赖关系产生破坏,特别是对于Singleton模式的组件而言,这可能对整个系统产生重大的影响。

4、同样,由于关联关系仅在构造函数中表达,只有组件创建者需要关心组件内部的依赖关系。对调用者而言,组件中的依赖关系处于黑盒之中。对上层屏蔽不必要的信息,也为系统的层次清晰性提供了保证。

5、通过构造注入,意味着我们可以在构造函数中决定依赖关系的注入顺序,对于一个大量依赖外部服务的组件而言,依赖关系的获得顺序可能非常重要,比如某个依赖关系注入的先决条件是组件的DataSource及相关资源已经被设定。

二、设值注入的优势

1、对于习惯了传统JavaBean开发的程序员而言,通过setter方法设定依赖关系显得更加直观,更加自然。

2、如果依赖关系(或继承关系)较为复杂,那么构造注入模式的构造函数也会相当庞大(我们需要在构造函数中设定所有依赖关系),此时设置模式往往更为简洁。

总结

可见,构造注入和设置注入模式各有千秋,而Spring对这两种依赖注入机制提供了良好支持。这也就为我们提供了更多的选择余地。




分享到:
评论

相关推荐

    Spring框架基础之依赖注入和标注

    依赖注入和标注的基本概念,分类,使用方式,用来解决 组件值得 装配问题,组件扫描等

    基于SpringBoot构造器注入循环依赖及解决方式

    在Spring Boot应用中,构造器注入是一种常见的依赖注入方式,但它可能会引发循环依赖的问题。循环依赖是指两个或多个Bean之间形成一个闭环,彼此依赖对方,导致Spring容器在初始化Bean时无法确定创建顺序,从而抛出...

    spring笔试题28题选择+2简答

    - **概念澄清**: 在Spring框架中,“依赖注入”和“控制反转”(Inversion of Control, IoC)实际上是同一个概念的不同表达方式。IoC强调的是控制权的转移,即由外部容器负责对象的创建和依赖关系的管理,而不是由对象...

    spring-ai-core 0.8.1

    例如,通过将预训练的文本分类模型与Spring Web MVC结合,开发者可以快速搭建一个文本分析服务,对用户输入的评论或问题进行自动分类和回答。 总的来说,Spring AI Core 0.8.1是一个强大的工具,它将AI模型的管理和...

    Spring-SpringMVC-Mybatis整合所有jar包

    1. **Spring框架**:Spring是一个全面的开源应用框架,它提供了对AOP(面向切面编程)、DI(依赖注入)和IoC(控制反转)的支持。在Java企业级应用中,Spring可以帮助开发者更好地管理对象之间的关系,降低组件间的...

    spring框架jar包,已经分类

    Spring框架是中国Java开发领域中最广泛使用的开源框架之一,它的核心特性是依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)。这两个概念是Spring框架的基础,也是...

    Spring.html

    注意:使用注解的方式,最终通知和后置通知顺序换了,建议使用环绕通知 注解 配置 声明式事务管理 PlatFormTransactionManager:平台事务管理器:定义了commit/rollback Mybatis/jdbc:...

    Spring MVC + Mybatis+Spring实现的个人博客系统

    Spring是Java企业级应用的核心框架,它提供了依赖注入(DI)和面向切面编程(AOP)等特性,使得应用的组件解耦,便于测试和维护。在本项目中,Spring作为容器管理了所有bean的生命周期,包括Spring MVC的控制器、...

    spring用到的jar包_spring用到的jar包_已分类_

    Spring框架是Java开发中不可或缺的一部分,它为开发者提供了丰富的功能,包括依赖注入、面向切面编程、事务管理、数据访问等。在这个压缩包中,包含了Spring框架的核心组件以及与之相关的支持库,使得开发者能够快速...

    spring-note

    3. **比较 set 和构造注入方式** - **set 方式** 更加灵活,适用于依赖项较少的情况。 - **构造器方式** 更适合依赖项较多或者对象不可变的情况。 ##### 五、复杂装配 1. **工厂方式装配** - **静态工厂方式...

    基于spring+spring mvc+hibernate的智能农业信息管理系统

    首先,Spring作为Java领域中的轻量级框架,其核心特性是依赖注入(Dependency Injection,简称DI),通过控制反转(Inversion of Control,简称IoC)来实现组件间的解耦,提高系统的灵活性和可测试性。Spring MVC是...

    Spring面试宝典 不看后悔

    综上所述,Spring框架提供了丰富的特性来帮助开发者高效地构建和管理应用程序,从依赖注入到事务管理,再到生命周期管理等方面,都提供了强大的支持。通过对这些知识点的理解和掌握,可以帮助开发者更好地应对面试和...

    spring和Mybatis整合jar包

    Spring是一个全面的后端应用框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等功能,而MyBatis则是一个轻量级的持久层框架,专注于SQL映射和数据库交互。将这两个框架整合在一起可以实现高效、灵活的...

    spring依赖包

    1. **Spring Core**: 这是Spring框架的基础,提供了依赖注入(DI)和控制反转(IOC)的功能。通过容器管理对象的生命周期和依赖关系,使得代码更加解耦,便于测试和维护。 2. **Spring Beans**: 它定义了如何配置和...

    Spring 3.2.0 API_CHM

    首先,`spring-3.2.0api带索引.chm`文件包含了一个完整的Spring 3.2.0 API参考,其中的搜索功能使得快速查找和理解各种类、接口和方法变得极为方便。CHM(Compiled Help Manual)格式是一种微软提供的帮助文件格式,...

    spring整合mybatis简单项目

    这个系统可能会包括资源的增删改查、分类管理等功能,帮助用户高效管理和检索影视资料。 **Spring框架** Spring是一个开源的应用框架,提供了一个全面的编程和配置模型,用于现代Java应用。它以其依赖注入...

    网上商城,基于SpringMVC、Spring和Mybatis框架

    **Spring框架**的核心在于依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。DI使得组件之间的依赖关系可以通过配置来管理,而不是硬编码,增强了代码的灵活性和可扩展性。...

    Spring-新闻发布系统

    Spring是一个广泛使用的Java企业级应用开发框架,它提供了丰富的功能,包括依赖注入、面向切面编程(AOP)、数据访问、Web应用支持等,使得开发者能够更高效地构建高质量的软件。 在描述中提到的"用Spring实现的一个...

    spring用到的jar包,已分类

    - `spring-core.jar`:Spring框架的核心模块,包含了IoC(Inversion of Control)容器的基础支持,如Bean工厂和依赖注入。 - `spring-beans.jar`:提供了Bean的定义、创建、配置以及管理,与`spring-core.jar`紧密...

Global site tag (gtag.js) - Google Analytics