精华内容
下载资源
问答
  • ioc和di的关系
    千次阅读
    2021-04-19 19:44:26

    IOC(控制反转)

    全称为:Inverse of Control .将对在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建。简单来说就是把本来在类内部控制的对象,反转到类外部进行创建后注入,不在由类本身镜像控制,这就是IOC的本质

    DI(依赖注入)

    全称为Dependency Injection,意思是自身对象中的内置对象是通过注入的方式进行创建

    IOC和DI的关系

    ioc就是容器,di就是注入这一行为,那么di确实就是ioc的具体功能的实现。而ioc则是di发挥的平台和空间。所以说。ioc和di即是相辅相成的拍档。他们都是为了实现解耦而服务的

    DI是如何实现的

    依赖注入可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现,Spring支持setter注入和构造器注入,通常使用构造器注入来注入必须的依赖关系,对于可选的依赖关系,则setter注入式更好的选择,setter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象

    更多相关内容
  • 依赖注入控制反转

    IoC(Inversion of Control)

    Ioc即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

    DI(Dependency Injection)

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

    要理解IOC和DI的关系,就要理解这两个概念,理解Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”。理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”。

    1.谁控制谁,控制什么

    传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对

    象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

    2.为何是反转,哪些方面反转了

    有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象,对象只是被动的接受依赖对象;哪些方面反转了?依赖对象的获取被反转了

    3.谁依赖于谁

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

    4.为什么需要依赖

    应用程序需要IoC容器来提供对象需要的外部资源

    5.谁注入谁

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

    6.注入了什么

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

    IoC和DI有什么关系呢?

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

    总结

    其实IoC/DI对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入它所需要的资源了。

    这么小小的一个改变其实是编程思想的一个大进步,这样就有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活

    展开全文
  • IOCDI之间的关系

    2020-11-25 14:59:18
    今天小翔来阐述一下IOCDI之间的关系 IOC即控制反转 DI即依赖注入 分别什么意思呢 先说IOC,之前类中方法,属性的使用,需要使用者创建对象(当然了,使用的不是静态方法或者静态属性,等等一些列静态的东西)也就是...

    今天小翔来阐述一下IOC与DI之间的关系

    IOC即控制反转

    DI即依赖注入

    分别什么意思呢 先说IOC,之前类中方法,属性的使用,需要使用者创建对象(当然了,使用的不是静态方法或者静态属性,等等一些列静态的东西)也就是需要new一个对象(像这些个单身狗哈,没事可以给自己多new几个对象~*v*~),而IOC的作用就是将创建对象这个过程交给了容器,即书上所说,容器启动则会实例化所有的单实例Bean. 也就是你项目启动的时候你的单实例Bean都会被创建,当然也可以使用懒加载,此处可以观看小翔的另一篇博文https://blog.csdn.net/cdliker/article/details/110081883

    其次来者为DI,依赖注入 也就是咱们项目中的被@Autowired的那一波操作

    有的码者说IOC 等于DI, 额.........从个角度来说他们是可以画等号滴~,因为毕竟他们是配合使用的,其实IOC是实现DI的一种方式.

    当我们在使用一些类的时候,就拿我截的图中为例吧,

    在LoginServiceImpl类中我们使用哪两个Mapper时,就不用再new 对象然后点方法,因为使用DI注入,Spring容器IOC就会帮我们创建这些Bean对象,在容器没有启动前你规划好一切,容器启动后就一并按照你的规划一顿安排.

    怎么样对于IOC与DI是否清楚,明白? 有任何问题随时在评论区呼我,小翔随时都在~0v0~!

    展开全文
  • 【Spring】IoCDI 关系

    2020-07-21 20:45:56
    [学习] Spring之IoCDI的理解一、IoC和DI关系二、控制反转IoC(inversion of control)1_ApplicationContext的三个实现类2_BeanFactoryApplicationContext的区别3_Spring创建对象4_Bean的作用域及生命周期三、...


    博客说明

    初次写博客,博客内文章所涉及的资料来自互联网整理及个人学习总结,仅仅用于个人学习和经验汇总,如有侵权或错误,请指认留言,在此表示感谢

    一、IoC和DI的关系

    IoC全称inversion of control ( 控制反转 )
    DI全称Dependency Injection ( 依赖注入 )

    • IoC是Spring 框架核心之一

    • DI(依赖注入)其实就是IOC的另外一种说法,DI是由Martin Fowler 在2004年初的一篇论文中首次提出的。

    • DI是 Spring 框架核心 IOC 的具体实现。

    • 在编写程序时,让对象的创建和依赖关系的设置本应该由自行处理的对象,通过spring中IoC是将这些操作交给spring框架(容器),来控制管理应用程序所需要使用的外部资源。资源受Spring管理,以降低耦合度,达到利用率最大化,但是代码中不可能出现没有依赖的情况,因此 IOC 的解耦只是降低他们的依赖关系,不会消除。

    • IoC 是一种思想,是一个重要的面向对象编程的法则,而其本身应该是Servlet自己创建Service的行为交给了spring创建,这就是将控制权由自己交给了别人的行为就叫控制反转(IoC),使用的方法就是依赖注入(DI)。

    二、控制反转IoC(inversion of control)

    • 控制:控制的双方是什么?谁控制谁?

      • 主控方:Spring
      • 被控方:应用程序所使用的资源
        (原始)应用程序直接控制需要的外部资源
        (Spring)Spring控制所需要的外部资源
    • 反转:什么是反转?反转什么?

      • 正向:应用程序直接调用资源
      • 反向:应用程序依赖Spring为其提供资源
        • 反转的是资源的控制权
        • 应用程序由主动调用资源,变为被动的等待Spring提供资源
    • 有什么好处?

      • 正向缺点:应用程序控制的资源分布在程序的每一个地方
      • 反向的优点:所有的资源都在Spring中,便于管理,降低了耦合度。
    • spring的IOC原理

    1_ApplicationContext的三个实现类

    Idea查看继承关系源码下,右键->Diagrams->show diagrams选中ApplicationContext-> show implementations

    1. ClassPathXmlApplicationContext
    它是从类的根路径下加载配置文件 推荐使用这种
    2. FileSystemXmlApplicationContext
    它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
    3. AnnotationConfigApplicationContext:
    当我们使用注解配置容器对象时,需要使用此类来创建 spring 容器,它用来读取注
    解。

    2_BeanFactory和ApplicationContext的区别

    • BeanFactory 是Spring容器中的顶层接口。 ApplicationContext 是它的子接口。
    • BeanFactoryApplicationContext 的区别:
      ApplicationContext:包含BeanFactory的功能,在生产对象后会将对象放入上下文进行管理,只要一读取配置文件,默认情况下就会创建对象。
      BeanFactory:作为对象工厂什么使用什么时候创建对象,只有生产对象的基本功能。

    3_Spring创建对象

    • Spring创建对象的三种方式
      • 构造器初始化
        Bean对应的类必须提供一个无参构造方法
      • 静态工厂初始化
        提供一个工厂类,使用其中的静态方法获取对象
      public class BeanFactory {
      	public static Bean getBean(){
      		return new Bean();
      	}
      }
      <bean id="beans" factory‐method="getBean" class="com.tzgod.demo.BeanFactory ">
      </bean>
      
      • 实例工厂初始化
        提供一个工厂类,使用其中的普通方法获取对象
      public class BeanFactory {
      	public Bean getBean(){
      		return new Bean();
      	}
      }
      <bean id="beans" factory‐method="getBean" factory‐bean="factory"></bean>
      <bean id="factory" class="com.tzgod.demo.BeanFactory "></bean>
      

    4_Bean的作用域及生命周期

    取值范围说明
    singleton默认值,单例的
    prototype多例的
    requestWEB项目中,Spring创建一个Bean的对象,将对象存入到request域中
    sessionWEB项目中,Spring创建一个Bean的对象,将对象存入到session域中
    global sessionWEB项目中,在Portlet环境
    Column 1Column 2
    • 更改作用域的方法
    //scope属性:singleton:单例 ;prototype:非单例
    <bean id=”beanId” class=”BeanClassName” scope=”prototype”></bean>
    

    Bean的生命周期

    • 单例对象: 一个应用只有一个对象的实例。它的作用范围就是整个引用。
      • 生命周期
        1. 生:当应用加载,创建容器时,对象就被创建了。
        2. 活:只要容器在,对象一直活着。
        3. 死:当应用卸载,销毁容器时,对象就被销毁了。
    • 多例对象:每次访问对象时,都会重新创建对象实例。
      • 生命周期
        1. 生:当使用对象时,创建新的对象实例。
        2. 活:只要对象在使用中,就一直活着。
        3. 死:当对象长时间不用时,被 java 的垃圾回收器回收了。
    • 监听
      • init-method
        初始化回调方法名,配置的方法必须由bean对象提供
      • destroy-method
        销毁回调方法名,配置的方法必须由bean对象提供

    三、依赖注入DI(Dependency Injection)

    • 什么是依赖?
      只要是全局属性都是当前类的依赖。

    • 什么是依赖注入?
      依赖注入:一般是将外界的对象 注入 到另一个对象里面。

    1_依赖注入的数据类型

    • 基本数据类型和String
    • javaBean类型
    • 复杂类型/集合类型

    2_依赖注入的方式

    • 使用构造函数注入
      使用类中的构造函数,给成员变量(简单类型、javaBean)赋值。赋值的操作不是我们自己做的,而是通过配置的方式,让spring框架来为我们注入。

    • 使用set方法注入
      表示在对某个对象设置属性时,通过其类中提供需要注入成员的set方法给成员变量(简单类型、javaBean)赋值注入的,而不是直接通过属性名称注入的。赋值的操作不是我们自己做的,而是通过配置的方式,让spring框架来为我们注入。

    • 使用注解注入

    @Component(@Repository、@Service、@Controller)
    作用于类上,用来表示将当前的类交给Spring进行管理(创建对象、注入对象)
    @Autowired
    作用于方法上,用来表示当前方法需要被注入一个对象
    @Bean
    作用于方法上,用来表示此方法提供一个对象
    @Qualifier
    作用于方法上,用来表示当前注入一个指定名称的对象
    @Configuration
    作用于类上,用来表示当前类为Spring的初始化配置类(入口类)
    @ComponentScan
    作用于类上,一般和Configuration 一起使用,用来表示Spring需要管理的类在哪一个包下

    3_复杂对象注入

    1. 通过sqlsessionfactory创建sqlsession对象
    2. 扫描注解@Bean通过sqlsession交给spring
    3. spring工厂创建的DogFood对象
    4. Spring注射器注入对象
    sqlsession交给spring
    注入
    sqlsessionfactory创建sqlsession对象
    spring工厂创建的DogFood对象
    Spring注射器
    Food对象
    展开全文
  • spring ioc和di关系

    2020-03-22 21:00:43
    什么是控制反转(ioc),什么是依赖注入(di); 原来的程序设计,上层类依赖底层类,他们之间的构造函数都会新建自己依赖的底层类,这个时候开发就很方便,只需构造上层类实例就可以使用,但是这时候一旦底层发生...
  • spring之IOC和DI关系

    2019-01-14 21:57:00
    spring之IOC和DI关系 IOC:控制反转;那么什么是控制反转呢? 对于程序开发人员来说,在没有使用spring之前,我们如果需要某一个对象,那么我们会直接去new这个对象,在程序员的世界里还有一个这样的...
  • spring中IoC和DI浅析

    2022-08-16 10:40:56
    IoC和DI都是spring框架中的重要概念,通常也是成对出现的,下面对IoC和DI及其关系进行简单分析。
  • 面向对象设计(OOD)有助于我们开发出高性能、易扩展以及易复用的程序。其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoCDI以及Ioc容器等...控制反转(IoC):一种反转流、依赖接口的方式
  • ioc和di关系

    千次阅读 2018-06-28 21:53:28
    有的人说这两个是一个,有的说diioc的实现,我就说说我的理解。  从gettersetter开始  从开始学习mvc设计模式,或者是jsp异或是框架,必然会有JavaBean或者其他类似的概念出现。gettersetter就是JavaBean...
  • IOC和DI的区别

    2021-10-12 16:21:44
    先从字面上理解一下什么是IOC,什么是DI IOC:Inversion of Control,我们一般叫做控制反转,这是一种技术思想,反转了什么控制,我的理解就是反转了对象创建以及管理的控制权,交给了外部环境,在Spring中具体的...
  • Spring——IoC和DI

    2022-02-28 20:01:55
    IoCIoC 的作用IoC 的优点IoC 的缺点DI(依赖注入)什么是DI依赖注入的基本原则依赖注入的优势不同类型的依赖注入实现方式构造器依赖注入 Setter方法注入的区别顶级接口BeanFactory ApplicationContext 的区别...
  • 什么是IOC和DI

    2021-08-06 20:40:37
    在学习spring框架的过程中一定会学过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,下面是我对IoC(控制反转) 、DI(依赖注入)的理解。 一、IOC是 什么? IOC的英文名字是Inversion of Control,IOC即“控制反转”...
  • IOC和DI 的区别

    2021-10-17 19:18:30
    DI的意思是依赖注入 ,前者是目的更偏向于实际操作相比于传统的通过new的方式来创建对象并手动的为属性赋值这些行为完全交于程序员控制,IOC则是把创建对象并给对象中的属性赋值交由sprin工厂管理,从而达到控制反转...
  • 什么是IOC(控制反转)? 控制反转指的就是应用程序把对象的所有控制权都交给Spring容器,应用程序本身不负责对象的创建维护,然后容器把对象的使用权反转给程序。 实例化对象的两种实现方式: 配置方式: 注解...
  • spring IOC和DI 理解

    2021-11-15 11:51:25
    IOC(控制反转)和DI(依赖注入)是spring中的重要组成部分,下面是个人的一些理解,不代表官方。 1、IOC是什么? IOC:全名是Inversion of Controller 中文解释是控制反转,不是什么技术,是一种设计思想。在java...
  • IOC和DI的理解

    2021-08-24 23:52:42
    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoCDI这两个概念是模糊不清的,是很难理解的,今天大家分享网上的一些技术大牛们对Spring...
  • DI是“依赖注入”是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。 DI其实就是IOC的另外一种说法,DI是由Martin Fowler 在2004年初的一篇论文中首次提出的。他总结道...
  • 理解Spring中的IoC和DI

    2021-01-14 20:14:11
    什么是IoC和DIIoC(Inversion of Control 控制反转):是一种面向对象编程中的一种设计原则,用来降低计算机代码之间的耦合度。其基本思想是:借助于“第三方”实现具有依赖关系的对象之间的解耦。DI(Dependence ...
  • Spring的IOC和DI详解

    2019-05-05 11:05:42
    1.1、IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?...
  • Spring中IOC和Di

    2022-04-24 20:08:08
    ioc
  • 对于Spring而言,就是由Spring来控制对象的生命周期对象之间的关系IoC还有另外一个名字——“依赖注入(Dependency Injection)”。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,即由...
  • 什么是IoC DI

    2021-01-16 20:13:54
    IoC 即控制反转,DI即依赖注入 简单来说,IoC是一种思想,而DI是这种思想的具体实现方式 2.深入了解 要了解控制反转( Inversion of Control ), 有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency ...
  • Spring的IOC和DI(带例子,超级详解)

    千次阅读 多人点赞 2019-10-10 13:07:15
    1、什么是IOC?(Inversion Of Controll 控制反转) 控制反转是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度,其中最常见的方式是依赖注入,还有一种方式是依赖查找(Dependency Lookup),...
  • spring IOC和DI详解

    2021-12-16 22:23:04
    spring、IOCDI、Java反射。
  • java IOC 和DI

    2021-06-03 16:25:41
    IOC:全名 Inversion Of Control,即控制反转。就是将你设计好的对象交给Spring容器进行管理,不是在自己的对象内部进行控制,这样的控制关系的反转叫做控制反转。 注: 以前是我们自己在对象内部创建我们所需要的...
  • 3、IOC和DI DI—Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。 依赖注入的目的并非为软件系统带来更多功能,而是为了...
  • Spring中的IoCDI的理解

    千次阅读 2020-12-28 21:28:27
    IoC出现以前,组件之间的协调关系是由程序内部代码来控制的,或者说,以前我们使用New关键字来实现两组间之间的依赖关系的。这种方式就造成了组件之间的互相耦合。IoC(控制反转)就是来解决这个问题的,它将实现...
  • Spring IOC和DI的理解

    千次阅读 2020-05-22 18:03:53
    Spring框架中离不开Spring的IoC(控制反转) 、DI(依赖注入),这里从IOC是什么、IOC能做什么、IOC和DI的区别三个方面介绍下IOC和DI。 一、IOC是什么 IOC:Inversion Of Control,控制反转。它是一种设计思想,将你设计...
  • Spring 创建这个类的过程中,Spring 将类的依赖的属性设置进去.IOCDI的的区别:IOC: 控制反转,将类的对象的创建交给Spring类管理创建.DI: 依赖注入,将类里面的属性在创建类的过程中给属性赋值.DI和IOC...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,913
精华内容 14,765
关键字:

ioc和di的关系