概述

Spring IOC控制反转,分为两个方面解释:

  1. 控制:对象对于内部成员的控制
  2. 反转:将之前对象管理自己内部成员,转变为ioc容器管理,目的是接耦

IOC的好处是:

  1. 无需手动创建,拿来就用
  2. 享受单例的好处,效率高、节省空间
  3. 统一配置,方便管理

原理

spring ioc容器原理是根据Java的反射机制,获取类的所有信息,再通过xml或者注解配置获取类与类之间的关系,最后根据以上信息构建类与类之间的依赖。

容器加载bean原理如下:

  1. 根据xml、注解获取bean的配置信息,在容器内部创建注册表
  2. 根据注册表实例化bean,并创建bean与bean之间的依赖
  3. 将初始化的bean保存在容器的缓存中(hashmap),等待客户端调用(bean的作用域为singleton,如果为property则不缓存直接返回)

Spring容器

bean工厂分为两种:

  1. BeanFactory,面向Spring
  2. ApplicationContext,基于BeanFactory基础,实现了一系列功能

两者区别?

  1. BeanFactory初始化bean采用懒加载,在获取的时候才创建;ApplicationContext启动时一次性全部加载,如果配置错误则无法启动容器,可以提前检测配置正确性,当然也导致容器启动速度慢
  2. 对于配置文件,ApplicationContext提供了访问URL和文件访问的接口
  3. ApplicationContext支持aop
  4. BeanFactory接口需手动注册,ApplicationContext自动

容器启动原理

web环境Spring、Spring mvc容器加载过程

对于一个web应用,部署在web容器中,容易提供一个全局应用上下文(ServletContext),为后面的IOC容器提供宿主环境。

其次,因为web.xml中会提供有contextLoaderListener(或ContextLoaderServlet),当web容器启动后,触发IOC容器初始化时间,contextLoaderListener监听到事件后,Spring将初始化一个上下文(WebApplicationContext接口),实现类为XmlWebApplicationContext(IOC容器)。 IOC初始化后,开始初始化各种servlet(DispatchServlet),以IOC容器为宿主环境进行初始化(两者都有属于自己的bean缓存)

bean生命周期

Spring IOC模式与工厂模式的区别?

当需求改变,工厂模式需要手动修改;IOC是动态生成的

spring ioc原理解析相关推荐

  1. Spring Ioc原理解析

    Spring Ioc原理解析 IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦 ...

  2. Spring IOC 原理解析

    Spring IOC 原理 ? IOC DI(依赖注入) **DI注入的几种方式** IOC容器 IOC原理 要想理解IOC,就需要知道一下IOC.DI 和IOC容器都是干什么的 IOC spring ...

  3. Spring Ioc原理及解析

    IOC简介 IoC是Inversion of Control的缩写,多数书籍翻译成"控制反转",还有些书籍翻译成为"控制反向"或者"控制倒置" ...

  4. spring ioc原理分析

    spring ioc原理分析 spring ioc 的概念 简单工厂方法 spirng ioc实现原理 spring ioc的概念 ioc: 控制反转 将对象的创建由spring管理.比如,我们以前用 ...

  5. Spring IOC 原理

    Spring IOC原理 IOC理解 自己写的简单的IOC容器 IOC的原理 定位.加载.注册 基于XML配置的IOC容器初始化 1.寻找入口 2.获取配置路径 3.开始启动 4.创建容器 5.载入配 ...

  6. Spring Boot 原理解析—启动类包扫描原理

    为了何更好的理解该篇内容,请先阅读Spring Boot 原理解析-入口SpringApplication. 我们知道在使用Spring Boot时,Spring会自动加载Spring Boot中启动 ...

  7. Spring IOC BeanDefinition解析

    Spring IOC BeanDefinition解析 IOC(Inversion of Control)即控制反转,是说创建对象的控制权进行了转移,以前创建对象的主动权和创建时机是由自己把控的,而现 ...

  8. 解析Spring IOC原理——工厂模式与反射机制的综合应用

    (一)工厂模式 从一个例子开始讲起: 首先我们建立一个Chinese.java类,该类的sayHelloWorld(String name)方法,用中文对名为name的人问好,其内容如下: [java ...

  9. Spring IOC原理 Bean标签解析和Definition封装

    以下源码版本是 Spring 5.2.x IOC Inversion of Control 控制反转,关键实现是DI Dependency Injection,就必然涉及到有一个容器保存系统中所有托管 ...

最新文章

  1. hdu 1054(最小顶点覆盖)
  2. 张清:你hold住微博实名制吗?
  3. Showing multiple lines on a single chart in Node-RED
  4. 软件工程导论团队项目
  5. pyecharts x轴字体大小调整_pyecharts 柱状图基础篇#学习笔记#
  6. 1000道Python题库系列分享26(12道Pandas编程题)
  7. jQuery中的$.getJSON、$.ajax、$.get、$.post的区别
  8. java迷宫类编程题_第十届蓝桥杯省赛java类B组 试题 E:迷宫 (动态规划之回溯法)...
  9. TwoStep Cluster
  10. Fanuc机器人从控制柜导出GSD文件
  11. 使用Cloudflare API动态解析域名IP
  12. 图像处理基础:特征金字塔
  13. 网络挖掘初探索(2)_NEO4J图可视化
  14. 双屏、3屏拼接——A卡、N卡——Windows、Linux
  15. 宇视科技POE摄像机供电方式
  16. Todesk软件使用
  17. 开启snapshot的操作失败 如何解决——两种办法
  18. MySQL:Illegal mix of collations (utf8_general_ci,COERCIBLE) and (gbk_chinese_ci,IMPLICIT) for operat
  19. 个人网站选择支付宝api
  20. 选择适合的Node.js授权认证策略

热门文章

  1. 001@多用派发队列,少用同步锁
  2. 四大科技巨头跟随者众 智能家居市场容量可观
  3. mysql 用户已设置密码,但登录可以不填密码
  4. 由return联想到的
  5. List, Set, Map是否继承自Collection接口?
  6. Sockets programming in Python
  7. php培训12.22
  8. 计算机数据库基础知识笔记,计算机基础及技巧(我的电脑笔记,适合新手!包含使用电脑最基本的知识及DOS、网络及数据库等。)...
  9. iframe js 加载失败_如何提高Vue项目首页的加载速度
  10. MySQL常见的主从复制架构_如何搭建经典的MySQL 主从复制架构