iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring IOC与DI核心概念是什么
  • 106
分享到

Spring IOC与DI核心概念是什么

2023-07-05 04:07:29 106人浏览 薄情痞子
摘要

这篇文章主要介绍“spring ioc与DI核心概念是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring ioC与DI核心概念是什么”文章能帮助大家解决问题。深入理解

这篇文章主要介绍“spring ioc与DI核心概念是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring ioC与DI核心概念是什么”文章能帮助大家解决问题。

深入理解IOC思想

spring本质就在于将对象全部交由给spring容器创建和管理,由容器控制对象的整个生命周期、核心就是IOC控制反转和aop面向切面编程

先说IOC

IOC是一种设计思想,叫做控制反转。本质就是通过Spring来负责对象的生命周期以及对象间的关系。在面向对象开发过程中,我们程序中的各个对象往往会存在各种各样的依赖关系,因此耦合度极高,一旦修改其中一个类信息就会牵扯到很多相关类需要修改。那么为了降低这种耦合度IOC指出引用第三方容器,也就是将所有对象的创建和管理交由第三方容器统一操作。这里的容器指的就是spring容器,我们需要将各个实现类映射到spring容器中的bean。

看了网上一些大佬的理解,针对IOC主要两个问题,IOC是谁控制谁,被反转的是什么?Spring容器控制了对象,创建对象的主动权从程序编码反转给了spring容器。扯到IOC就不得不提DI依赖注入,

  • 应用程序依赖于IOC容器

  • 通过DI,程序可以获得所需的依赖资源比如一个对象或常量数据

  • IOC容器将依赖对象注入到程序中

这个过程就体现出了IOC思想。

面试回答:什么是IOC?传统的面向对象开发中需要我们手动编码通过new关键字创建对象并为对象装配所需资源,而控制反转则可以将创建对象的主动权交给第三方容器完成,程序变成被动的接收对象。我认为IOC主要牵扯到两个问题就是谁控制谁,什么被反转?首先控制就是由最初的程序控制对象反转为由容器控制对象,被反转的就是获取依赖对象的方式

DI&IOC

一直觉得对于IOC的理解不够深入,发现自己忽略了一个关键词–>依赖对象,那么什么是依赖对象。对于依赖对象的定义我的理解是,两个对象都有自己需要完成的工作,但是A对象的一些行为需要B对象协作完成,那么在这些协作完成的行为中A对象就可以被称之为B对象的依赖对象。此时两者的耦合度是较高的,因为一旦某一个对象发生变化将会影响到另一个对象

我们假设对象A需要去操作数据库,那么A就会需要获得Connection连接对象,在使用spring之前我们通过编码new关键字获取一个连接交给对象A,此时对象A与Connection就是存在一定的耦合性的。引入了spring容器之后,我们将Connection去注册到容器当中然后Connection会由容器创建完成,当A需要的时候就丢给A去使用,不用去关心Connection怎么创建,实现解耦。Connection就是对象A的一个依赖对象,但是在我看来,依赖对象并不仅仅代表一个对象,也可以是一个常量数据。我在整合mybatis和spring的时候,我终于体会到了解耦的感觉,之前在使用sqlSessionFactory创建SqlSession的过程中,首先要创建sqlSessionFactory然后通过它的openSession方法去获取SqlSession实例,也就是说SqlSession依赖于SqlSessionFactory,下面看最初的写法

{  private static SqlSessionFactory sqlSessionFactory;  static {    try {      InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");      sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    } catch (IOException e) {      throw new RuntimeException(e);    }  }  // 提供工厂方法 创建sqlSession实例  public static SqlSession getSqlSession(){    return sqlSessionFactory.openSession();  }}

上述代码中,我们通过new创建SqlSessionFactoryBuilder,在调用它的build方法创建出了sqlSessionFactory,这之间就存在这依赖关系,也就是存在耦合。继续往下看,我们直接编写好一个方法用于获取SqlSession实例,但是这个方法也是通过factory创建的。所以两者之间同样存在耦合关系。那么引入spring容器之后,我们利用第三方的容器,就可以实现两者的解耦。看下列applicationContext的配置

<!--  配置sqlSessionFactory  --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  <property name="dataSource" ref="datasource"/>  <!--   绑定mybatis配置文件     -->  <property name="configLocation" value="classpath:mybatis-config.xml"/>  <!--     映射器  注册mapper.xml文件   -->  <property name="mapperLocations" value="classpath:com/yuqu/dao/*.xml"/></bean><!--  配置sqlsession  --><bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">  <!--      只能选择构造器注入sqlSessionFactory  没有SqlSessionTemplate提供set方法  -->  <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/></bean>

看到了吗,sqlSessionFactory被我们映射为容器中的bean,然后映射SqlSession的bean,然后通过注入的方式将sqlSessionFactory注入进sqlSession中,当在程序中需要获取sqlSession的时候就不用再去管SqlSessionFactory是如何创建的。以此实现真正解耦的目的。同样的我们可以将sqlSession去配置到其他的bean中

<bean id="userMapperImpl" class="com.yuqu.dao.UserMapperImpl">  <property name="sqlSession" ref="sqlSession"/></bean>

这样在需要获取userMapperImpl对象的时候就不用再去创建sqlSession实例然后getMapper,只需要直接用spring去getBean即可获取到,同样也完成了解耦工作。所以说,DI依赖注入就是实现IOC的一种方式。

关于“Spring IOC与DI核心概念是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Spring IOC与DI核心概念是什么

本文链接: https://www.lsjlt.com/news/349386.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring IOC与DI核心概念是什么
    这篇文章主要介绍“Spring IOC与DI核心概念是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring IOC与DI核心概念是什么”文章能帮助大家解决问题。深入理解...
    99+
    2023-07-05
  • Spring的核心基础IOC与DI怎么掌握
    本文小编为大家详细介绍“Spring的核心基础IOC与DI怎么掌握”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring的核心基础IOC与DI怎么掌握”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、Spr...
    99+
    2023-07-05
  • Spring中Spring Boot与Spring MVC的核心概念是什么
    这篇文章主要介绍了Spring中Spring Boot与Spring MVC的核心概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring中Spring Boot与Sp...
    99+
    2023-06-29
  • Spring框架核心概念是什么
    这篇文章主要为大家展示了“Spring框架核心概念是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring框架核心概念是什么”这篇文章吧。1、Spring是什么简而言之,Spring是企...
    99+
    2023-06-29
  • Spring IOC核心流程是什么
    本篇内容主要讲解“Spring IOC核心流程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring IOC核心流程是什么”吧! 初始化大致单步跟了下Spring IOC的初始化过程,...
    99+
    2023-06-02
  • Spring Boot与Spring MVC Spring对比及核心概念
    目录一、SpringBoot、SpringMVC、Spring对比Spring框架SpringMVCSpringBoot二、SpringBoot自动配置三、什么是SpringBoot...
    99+
    2022-11-13
  • Angular2核心概念是什么
    这篇文章主要介绍“Angular2核心概念是什么”,在日常操作中,相信很多人在Angular2核心概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Angular2核心...
    99+
    2022-10-19
  • 常见Ruby核心类概念是什么
    常见Ruby核心类概念是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Ruby语言中的类和对象是一个非常重要的知识点。要向学习Ruby语言,首先要掌握的就是Ruby对象与类...
    99+
    2023-06-17
  • MongoDB数据库核心概念是什么
    本篇内容介绍了“MongoDB数据库核心概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MongoDB数据库核心概念1.NoSQL数...
    99+
    2023-07-06
  • webpack的五个核心概念是什么
    这篇“webpack的五个核心概念是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“we...
    99+
    2022-10-19
  • Webpack4.x的四个核心概念是什么
    这篇“Webpack4.x的四个核心概念是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Webpack4.x的四个核心概...
    99+
    2023-07-02
  • java中的四个核心概念是什么
    本篇内容主要讲解“java中的四个核心概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中的四个核心概念是什么”吧!1.Java虚拟机Java虚拟机的主要任务是装在class文件并...
    99+
    2023-06-17
  • 接口测试的核心概念是什么
    本篇内容介绍了“接口测试的核心概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!开发口中的接口是什么我相信绝大多数测试同学听闻“接口”...
    99+
    2023-06-15
  • Spring Data JPA框架的核心概念与Repository接口详解
    目录1 核心概念CrudRepository接口PagingAndSortingRepository接口2 查询方法3 后续内容介绍1 核心概念 Spring Data存储库抽象的中...
    99+
    2022-11-13
  • Spring与Spring Boot核心区别是什么
    本篇内容介绍了“Spring与Spring Boot核心区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是Spring作为 Ja...
    99+
    2023-06-16
  • Spring底层架构核心概念Environment怎么使用
    这篇“Spring底层架构核心概念Environment怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring底...
    99+
    2023-07-04
  • Spring IOC推导与DI构造器注入的方法是什么
    这篇文章主要讲解了“Spring IOC推导与DI构造器注入的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring IOC推导与DI构造器注入的方法是什么...
    99+
    2023-07-05
  • Java中的线程生命周期核心概念是什么
    本篇内容主要讲解“Java中的线程生命周期核心概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的线程生命周期核心概念是什么”吧!Java多线程在Java语言中,多线程是由线程的...
    99+
    2023-07-02
  • Spring AOP的概念与实现过程是什么
    今天小编给大家分享一下Spring AOP的概念与实现过程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Ao...
    99+
    2023-07-05
  • Spring AOP基本概念是什么
    本篇内容介绍了“Spring AOP基本概念是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  什么是AOP  AOP即面向切面编程。 ...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作