IOC容器概念

  • 1、普通容器
  • 2、复杂容器
  • 3、IOC思想
    • ① 获取资源的传统方式
    • ②控制反转方式获取资源
    • ③DI
  • 4、 IOC容器在Spring中的实现
    • ① BeanFactory
    • ②ApplicationContext
    • ③ApplicationContext的主要实现类

1、普通容器

① 生活中的普通容器

例如杯子、水桶,用来存储,没有更多功能

② 程序中的普通容器

  • 数组
  • 集合:list
  • 键值对: map

2、复杂容器

① 生活中的复杂容器

例如学校,有学生、老师、领导、工作人员、教室、宿舍等等

② 程序中的复杂容器

IOC 容器就是一个复杂容器。它们不仅要负责创建组件的对象、存储组件的对象,还要负责调用组件的方法让它们工作,最终在特定情况下销毁组件。

3、IOC思想

IOC:Inversion of Control,翻译过来是反转控制。

① 获取资源的传统方式

自己建房子:选地基、浇筑地梁、主体砌筑、填土砸夯、封顶,全过程参与,费时费力,必须清楚了解资源创建整个过程中的全部细节且熟练掌握。

在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。

②控制反转方式获取资源

买房:选楼盘选户型选楼层。不必关心资源创建过程的所有细节。

反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。

③DI

DI:Dependency Injection,翻译过来是依赖注入。

DI 是 IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如:setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。

所以结论是:IOC 就是一种控制反转的思想, 而 DI 是对 IOC 的一种具体实现。

4、 IOC容器在Spring中的实现

Spring 的 IOC 容器就是 IOC 思想的一个落地的产品实现。IOC 容器中管理的组件也叫做 bean。在创建 bean 之前,首先需要创建 IOC 容器。Spring 提供了 IOC 容器的两种实现方式:

① BeanFactory

这是 IOC 容器的基本实现,是 Spring 内部使用的接口。面向 Spring 本身,不提供给开发人员使用。

②ApplicationContext

BeanFactory 的子接口,提供了更多高级特性。面向 Spring 的使用者,几乎所有场合都使用 ApplicationContext 而不是底层的 BeanFactory。

③ApplicationContext的主要实现类

类型名 简介
ClassPathXmlApplicationContext 通过读取类路径下的 XML 格式的配置文件创建 IOC 容器对象
FileSystemXmlApplicationContext 通过文件系统路径读取 XML 格式的配置文件创建 IOC 容器对象
ConfigurableApplicationContext ApplicationContext 的子接口,包含一些扩展方法 refresh() 和 close() ,让 ApplicationContext 具有启动、关闭和刷新上下文的能力。
WebApplicationContext 专门为 Web 应用准备,基于 Web 环境创建 IOC 容器对象,并将对象引入存入 ServletContext 域中。

Spring中IOC容器概念相关推荐

  1. 关于Spring中IOC容器和AOP协同工作的原理理解

    1.在详细介绍 IOC 容器的工作原理前,这里先介绍一下实现 IOC 所用到的一些辅助类,包括BeanDefinition.BeanReference.PropertyValues.PropertyV ...

  2. Spring中IOC容器

    IOC入门案例思路分析 1.管理什么(Service和Dao) 2.如何将管理的对象存放到IOC容器(配置applicationContext.xml)第二步 3.将管理的对象存放到IOC容器,如何获 ...

  3. spring中ioc是什么

    摘自:https://www.jb51.net/article/123900.htm IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则.下面通过本文给大 ...

  4. 在servlet(或者filter或者listener)中使用spring的IOC容器

    web.xml中的加载顺序为:listener >> filter >> servlet >> spring.其中filter的执行顺序是filter- mappi ...

  5. Spring中IOC和AOP的详细解释(转)

    原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...

  6. spring的IOC容器

    文章目录 1. IOC.IOC容器.Bean.DI 2. 核心概念小结 3,入门案例 3.1 IOC入门案例 3.1.1 入门案例思路分析 3.1.2 入门案例代码实现 步骤1:创建Maven项目 步 ...

  7. Spring中IOC和AOP的详细解释

    我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC就是典型的工厂模式,通过s ...

  8. [Spring 深度解析]第6章 Spring的IoC容器系列

    6. Spring的IoC容器系列 ​ IoC容器为开发者管理对象之间的依赖关系提供了很多便利和基础服务.有许多IoC容器供开发者选择,SpringFramework的IoC核心就是其中一个,它是开源 ...

  9. 框架:简单实现Spring的IOC容器

    学习过Spring的同学都知道,Spring框架的核心就是IoC和AOP.Spring可以理解为一个工厂,负责对象的创建和对象间关系的维护.IoC即控制反转,简单点说就是原来的对象是在要使用之前通过在 ...

  10. Spring的IOC容器为什么用反射而不用new来创建实例?

    文章目录 1. 什么是反射? 2. 反射与new的区别 2. IOC为什么要使用 工厂 + 反射 创建对象? 1. 什么是反射? 反射是java的一种特性,对于任意一个类,都能够知道这个类的所有属性和 ...

最新文章

  1. 常见的浏览器兼容性问题与解决方案——CSS篇
  2. 解决Linux下MySQL启动错误Starting MySQL.Manager of pid-file quit without updating file.[FAILED]...
  3. 遍历 List 之效率
  4. Node.js -- Router模块中有一个param方法
  5. python3 整除_python如何整除
  6. 【转载】html中object标签详解
  7. SSH进阶(2)——用Struts拦截器实现登陆限制
  8. 【iOS自动化测试】第一章:方案调研
  9. 带圆圈的数字和markdown常用表达式记录
  10. DM数据库实例迁移教程
  11. 如何格式化小米云服务器,互联网要点:怎么把小米手机格式化(恢复出厂设置)...
  12. sqli-labs 第八关盲注脚本
  13. FastReport.Net报表工具 vs RDL标准报表定义语言
  14. 数学建模----LaTex排版使用速成
  15. 植树节的微信软文如何写?素材加文案帮你分分钟搞定!
  16. 浓浓新华情 温暖大家庭
  17. [转]SpringMVC常见面试题总结
  18. 拖拽插件jquery.dad.js
  19. 原生JS获取body
  20. SEO优化 - robots协议

热门文章

  1. 【语音隐写】基于matlab GUI DWT音频数字水印(带语音播报)【含Matlab源码 711期】
  2. 【滤波器】基于matlab GUI IIR+FIR数字滤波器设计【含Matlab源码 698期】
  3. 【语音隐写】基于matlab小波变换算法求解水印嵌入提取【含Matlab源码 513期】
  4. 【光学】基于matlab光栅衍射仿真【含Matlab源码 502期】
  5. 【财务预警】基于matlab BP神经网络财务预警【含Matlab源码 494期】
  6. python坐标系教程_python Shapely使用指南详解
  7. 统一修改gcd高程文字样式_样式与格式的使用
  8. ai医疗行业研究_我作为AI医疗保健研究员的第一个月
  9. java 邮件内嵌图片_(二)JavaMail创建包含内嵌图片的邮件
  10. # 畸变矫正_拒绝拍照边缘畸变 坚果Pro 3 Smartisan OS v7.2.0系统体验