IoC容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: IoC容器

IoC(控制反转:Inverse of Control),又称作依赖注入,是一种重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。

IoC和DI

DI—Dependency Injection,即依赖注入;

依赖:应用程序依赖IoC容器,在程序运行的时候,应用程序需要IoC容器来提供对象需要的外部资源;

注入:IoC容器注入应用程序的某个对象,注入了其所需要的的外部资源(对象、资源和数据等);

所以说控制反转是通过依赖注入实现的,其实它们是同一个概念的不同角度描述。通俗来说就是IoC是设计思想,DI是实现方式。 一个新的名字:“依赖注入”,相对IoC 而言, 依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

IoC(控制反转)原理解释

在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。

IoC配置文件详解

  • id:对象的唯一标识;
  • class:bean的完全限定名称,从包名称到类名称;
  • property:给属性赋值,name的名称取决于set()方法后面的参数,ref引用具体的值;

Spring IoC的初始化流程

Bean的定义和初始化在Spring IoC容器中是两大步骤,它是先定义,然后才是初始化和依赖注入的。Bean的定义分为3步:

  1. Resource定位,这步是Spring IoC容器根据开发者的配置,寻找用户定义的bean资源,在Spring开发中,通过XML或者注解方式都可以,而定位的内容也就是bean资源是由用户提供的。
  2. BeanDefinition的载入,这个时候只是将Resource定位到的信息保存到BeanDefinition中,此时并不会创建Bean的实例。
  3. BeanDefinition的注册,这里就是将BeanDefinition的信息发布到Spring IoC容器中,此时仍旧没有对应的Bean的实例创建。

注入方式

Spring IOC依赖注入通常有如下两种方式:

IOC容器使用属性的Setter方法来注入被依赖的实例。这种注入方式简单、直观,因而在Spring的依赖注入里大量使用。

IOC容器使用构造器来注入被依赖的实例,构造注入在构造实例时,已经为其完成了依赖关系的初始化。通过构造方法注入Bean的属性值或依赖对象,它保证了Bean实例在实例化后就可以使用

相关文章
|
1月前
|
Java 测试技术 开发工具
ApplicationArguments读取应用程序参数并注入到IOC容器
ApplicationArguments读取应用程序参数并注入到IOC容器
ApplicationArguments读取应用程序参数并注入到IOC容器
|
2月前
|
XML Java 数据格式
Spring IoC容器初始化过程(xml形式)
Spring IoC容器初始化过程(xml形式)
46 0
|
1月前
|
存储 前端开发 Java
springboot中的第二个IOC容器BootstrapContext
springboot中的第二个IOC容器BootstrapContext
springboot中的第二个IOC容器BootstrapContext
|
1月前
|
XML Java 数据格式
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界 (下)
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界
|
1月前
|
XML Java 数据格式
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界 (上)
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界 (上)
|
3月前
|
XML Java 数据格式
Spring5源码(15)-IoC容器启动过程简析及XmlBeanFactory初始化
Spring5源码(15)-IoC容器启动过程简析及XmlBeanFactory初始化
31 1
|
3月前
|
XML Java 数据格式
Spring5源码(12)-IoC容器简介
Spring5源码(12)-IoC容器简介
32 1
|
3月前
|
XML Java 数据格式
Spring之容器:IOC(3)
【1月更文挑战第14天】 11、实验十:bean的作用域 12、实验十一:bean生命周期 13、实验十二:FactoryBean 14、实验十三:基于xml自动装配
42 1
|
3月前
|
XML Java 数据格式
Spring之容器:IOC(2)
【1月更文挑战第14天】 7、实验六:为数组类型属性赋值 8、实验七:为集合类型属性赋值 ①为List集合类型属性赋值 ②为Map集合类型属性赋值 ③引用集合类型的bean 9、实验八:p命名空间 10、实验九:引入外部属性文件 7、实验六:为数组类型属性赋值 8、实验七:为集合类型属性赋值 ①为List集合类型属性赋值 ②为Map集合类型属性赋值 ③引用集合类型的bean 9、实验八:p命名空间 10、实验九:引入外部属性文件
48 2
|
3月前
|
XML Java 数据格式
Spring之容器:IOC(1)
【1月更文挑战第13天】 一、IoC容器 1、控制反转(IoC) 2、依赖注入 3、IoC容器在Spring的实现 二、基于XML管理Bean 1、搭建子模块spring6-ioc-xml 2、实验一:获取bean ①方式一:根据id获取 ②方式二:根据类型获取 ③方式三:根据id和类型 ④注意的地方 ⑤扩展知识 3、实验二:依赖注入之setter注入 4、实验三:依赖注入之构造器注入 5、实验四:特殊值处理 ①字面量赋值 ②null值 ③xml实体 ④CDATA节 6、实验五:为对象类型属性赋值 方式一:引用外部bean 方式二:内部bean 方式三:级联属性赋值
97 1