对springioc的理解

     2022-03-19     788

关键词:

1、IoC和DI

  DI—Dependency Injection,即“依赖注入”组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

  理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:

  ●谁依赖于谁当然是应用程序依赖于IoC容器

  ●为什么需要依赖应用程序需要IoC容器来提供对象需要的外部资源

  ●谁注入谁很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象

  ●注入了什么就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

  IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

  看过很多对Spring的Ioc理解的文章,好多人对Ioc和DI的解释都晦涩难懂,反正就是一种说不清,道不明的感觉,读完之后依然是一头雾水,感觉就是开涛这位技术牛人写得特别通俗易懂,他清楚地解释了IoC(控制反转) 和DI(依赖注入)中的每一个字,读完之后给人一种豁然开朗的感觉。我相信对于初学Spring框架的人对Ioc的理解应该是有很大帮助的。

分享Bromon的blog上对IoC与DI浅显易懂的讲解

2.1、IoC(控制反转)

  首先想说说IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。

  那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转

2.2、DI(依赖注入)

  IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

  理解了IoC和DI的概念后,一切都将变得简单明了,剩下的工作只是在spring的框架中堆积木而已。

 

对springioc的理解

1、IoC和DI  DI—DependencyInjection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的... 查看详情

对springioc容器di的理解

1.IOC是什么?IOC(控制反转)是一种管理bean的容器,它的本质是对象工厂(接口)。在应用程序中的组件需要获取资源时,传统的方式是组件主动从容器中获取所需的资源,在这种模式下,开发人员需要知道具体容器中资源的获... 查看详情

springioc理解

  用spring做了几个项目后发现,对spring的IOC理解还是不够清晰,今天就来总结下自己的理解(个人的一些见解)  以前用jsp+servlet做网站时,只是分了显示层(jsp),控制层(servlet),和数据模型层,很传统的MVC三层架构,... 查看详情

深入理解springioc(代码片段)

深入理解IoC在一开始学习Spring的时候,我们就接触IoC了,作为Spring第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识。IoC理论IoC全称为InversionofControl,翻译为“控制反转”,它还有一个别名为DI(DependencyInj... 查看详情

阿里的spring框架面试题到底有多难?

...实现原理?讲解Spring框架中如何基于AOP实现的事务管理?SpringIOC相关问题什么是IOC?谈谈对控制反转的设计思想的理解?怎么理解SpringIOC容器?Spring中有多少种IOC容器?SpringIOC怎么管理Bean之间的依赖关系,怎么避免循环依赖?... 查看详情

如何理解springioc

...上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对SpringIoc的理解。一、开涛对Ioc的讲解原文 开涛的博客 1.IoC是什么Ioc—InversionofCo 查看详情

深入理解spring--动手实现一个简单的springioc容器(代码片段)

...质尚浅,能力还不够,昨天在网上碰巧看到一个实现简单的SpringIOC容器的视频教程, 查看详情

springioc理解

内容来自http://blog.csdn.net/qq_22654611/article/details/52606960一、分享Iteye的开涛对Ioc的精彩讲解  首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshi... 查看详情

谈谈我对springioc的理解

...上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对SpringIoc的理解。 1.1、IoC是什么Ioc 查看详情

springioc和aop的理解,还有就是啥时候用到作用域?

ioc就是控制反转,可以理解为当spring被加载启动后,在spring配置的bean都会被这个框架预先实例化(作用于为单例),然后在你需要的这个对象的时候直接添加注入就可以调用这个对象了这样可以大大降低了类之间的耦合度。一... 查看详情

2死磕spring——ioc之深入理解springioc(代码片段)

本文主要基于Spring5.0.6.RELEASE摘要:原创出处 http://cmsblogs.com/?p=2652 「小明哥」,谢谢!在一开始学习Spring的时候,我们就接触IoC了,作为Spring第一个最核心的概念,我们在解读它源码之前势必需要对其有深... 查看详情

springioc的理解

1.什么是springIOCIOC(InversionofControl)即控制反转,在我们以往的编程中如果需要一个bean往往需要去手动去new一个出来。而spring帮我们解决了这个问题,在spring中我们只需要去定义bean,spring就会自动的帮我们实例化并管理Bean。而... 查看详情

springioc和aop理解

springIOC1.目的:就是解决程序间的依赖关系2.原理:通过反射原理将我们控制层中的dao层、service层类以工厂模式在static代码块中实现加载后存放入map中,并实现单列。    查看详情

spring源码分析springioc容器之前生今世--defaultlistablebeanfactory源码解读

springIoc容器的实现,从根源上是beanfactory,但真正可以作为一个可以独立使用的ioc容器还是DefaultListableBeanFactory,因此可以这么说,DefaultListableBeanFactory是整个springioc的始祖,研究透它的前生今世对我们理解springioc的概念有着重要... 查看详情

springioc中各个注解的理解和使用

原文链接:http://www.cnblogs.com/xdp-gacl/p/3495887.html使用注解来构造IoC容器用注解来向Spring容器注册Bean。需要在applicationContext.xml中注册<context:component-scanbase-package=”pagkage1[,pagkage2,…,pagkageN]”/>。如:在base-pack 查看详情

谈谈你对springioc的理解建议收藏(代码片段)

背诵并默写:        SpringIOC有两个核心思想就是IOC控制反转和DI依赖注入,IOC 控制反转的基本思想是,将原来的对象控制从使用者,有了spring之后可以把整个对象交给spring来帮我们进行管理,DI 依赖注... 查看详情

对ioc和di的理解

...上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对SpringIoc的理解。一、分享Iteye的开涛对Ioc的精彩讲解  首先要分享的是Iteye的开涛这位技术 查看详情

springioc容器的一点简单理解

一个简单的例子Ioc(InversionofControl),控制反转。名字起得比较高大上,事实上是一种工程思想,不仅适用于编程领域。我用一个简单的例子来说明IoC:假设我们到一个餐馆里去吃饭,这个餐馆有成百上千个厨师,每位厨师只能... 查看详情