`
lyunabc
  • 浏览: 531016 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

Spring注入方式的分类和比较

 
阅读更多

构造函数注入

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

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

设值注入

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

依赖注入模式的对比总结

一、构造注入的优势:

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

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

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

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

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

二、设值注入的优势

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

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

总结

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




分享到:
评论

相关推荐

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

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

    Spring.html

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

    Spring常用注解.xmind

    Spring 常用注解整理,分类:创建对象;注入数据;范围;全局异常;生命周期;新注解;JPA;扩展原理等注解类型。

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    11.1.2 Struts和Spring比较 11.1.3 下载Struts 11.1.4 配置Struts 11.2 Struts的核心 11.2.1 ActionServlet(分发器) 11.2.2 Action(控制器) 11.2.3 Action Mapping(映射) 11.2.4 ActionForm(表单控制器) ...

    Spring框架(详细 一).md

    本篇博文适合零基础的同学:主要包括:spring介绍; Ioc 入门案例; Di 入门案例; 核心API介绍; 装配bean基于xml---实例化方式; bean种类; bean作用域; 生命周期; 属性注入--setter方法 p命名空间; sqel; 集合...

    基于SSM的电商系统 Java Spring Mybatis Springmvc

    基于SSM的电商系统是一种使用SSM(Spring + Spring MVC + MyBatis)框架开发的电子商务系统。这个系统结合了Java的Spring框架、...Spring框架提供了依赖注入和面向切面编程等功能,简化了开发过程。Spring MVC框架则负

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    11.1.2 Struts和Spring比较 11.1.3 下载Struts 11.1.4 配置Struts 11.2 Struts的核心 11.2.1 ActionServlet(分发器) 11.2.2 Action(控制器) 11.2.3 Action Mapping(映射) 11.2.4 ActionForm(表单控制器) ...

    博客系统(struts+hibernate+spring)130225.rar

    Spring 是一个轻量级的依赖注入容器,它提供了一种灵活的方式来管理对象的生命周期和依赖关系。通过结合这三个框架,这个博客系统实现了一个完整的博客平台的功能。它包括了用户注册、登录、发布文章、评论、分类...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    11.1.2 Struts和Spring比较 11.1.3 下载Struts 11.1.4 配置Struts 11.2 Struts的核心 11.2.1 ActionServlet(分发器) 11.2.2 Action(控制器) 11.2.3 Action Mapping(映射) 11.2.4 ActionForm(表单控制器) ...

    spring:Spring框架

    Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,提供了一个简易的开发式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。 核心技术 Bean管理...

    博客系统(struts+hibernate+spring).rar

    Spring是一个轻量级的Java企业级应用开发框架,它可以提供依赖注入、事务管理等功能,帮助开发者更好地管理项目。这个博客系统包含了许多实用的功能,如文章发布、评论、分类、搜索等。用户可以通过注册登录来管理...

    SpringMybatisRedis整合

    在spring的配置文件中注入如下模板类,然后直接注入调用 <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> ⑶UserSupportDao方式 方式 : 直接继承该类...然后调用...

    SSH框架详解

    Hibernate工作原理、Hibernate的核心组件、Persistent Object、Hibernate的运行过程、Hibernate缓存的作用、Hibernate缓存分类、Hibernate优点、 Hibernate缺点、spring原理 、AOP(Aspect-Oriented Programming): ...

    基于SSH模拟当当网项目(电子商务平台)

    采用Spring的IoC注入方式使用DAO 3.Action改造工作 采用整合插件注入方式使用Spring容器中的Service或DAO. (默认按名称匹配规则) 4.配置信息的改造 Service和DAO需要交给Spring容器. struts.xml不需要改变,因为...

    基于SSM ( Spring + SpringMVC + Mybatis)开发的知识问答社区+源代码+文档说明

    所有的用户输入都做了拦截与参数过滤,避免XSS攻击与SQL注入等。前端视图的渲染采用的是Thymeleaf模板引擎,它很好的与SpringMVC搭配了起来。数据的物理分页使用的是开源项目Mybatis-Page-Helper ,也是非常的轻量和...

    基于微信小程序的家庭大厨微信小程序的实现+ssm框架.rar

    使用SSM框架搭建后端服务,Spring提供依赖注入和控制反转的特性,Spring MVC处理前端请求,MyBatis进行持久层数据访问。 利用Spring框架实现控制反转(IoC)和依赖注入,提高了代码的可维护性和可测试性。 结合...

    基于微信小程序的家庭财务管理系统的设计与实现+ssm框架.rar

    使用SSM框架搭建后端服务,Spring提供依赖注入和控制反转的特性,Spring MVC处理前端请求,MyBatis进行持久层数据访问。 利用Spring框架实现控制反转(IoC)和依赖注入,提高了代码的可维护性和可测试性。 结合...

    基于Java springboot的垃圾分类网站源码+lw+ppt.zip

    系统实现了数据加密和防止SQL注入等安全措施,确保数据的安全性和完整性。 可以根据客户需求进行二次开发和定制,满足不同客户的需求。 提供详细的使用文档和技术支持,确保用户能够轻松上手使用本系统。

    weixin105文章管理系统+ssm(源码+部署说明+演示视频+源码介绍+lw).rar

    在weixin105文章管理系统中,Spring主要负责依赖注入和事务管理等功能。 SpringMVC:SpringMVC是Spring框架的一部分,它是一个用于构建Web应用程序的模型-视图-控制器(MVC)框架。在weixin105文章管理系统中,...

    SpringBoot项目地方废物回收机构管理系统.zip

    本系统采用模块化设计,前端可能使用Angular、React或Vue.js等现代JavaScript框架构建单页应用(SPA),后端则利用Spring Boot提供的依赖注入和自动配置特性快速搭建RESTful API接口。数据库选择上,通常采用MySQL或...

Global site tag (gtag.js) - Google Analytics