spring ioc原理解析
概述
Spring IOC控制反转,分为两个方面解释:
- 控制:对象对于内部成员的控制
- 反转:将之前对象管理自己内部成员,转变为ioc容器管理,目的是接耦
IOC的好处是:
- 无需手动创建,拿来就用
- 享受单例的好处,效率高、节省空间
- 统一配置,方便管理
原理
spring ioc容器原理是根据Java的反射机制,获取类的所有信息,再通过xml或者注解配置获取类与类之间的关系,最后根据以上信息构建类与类之间的依赖。
容器加载bean原理如下:
- 根据xml、注解获取bean的配置信息,在容器内部创建注册表
- 根据注册表实例化bean,并创建bean与bean之间的依赖
- 将初始化的bean保存在容器的缓存中(hashmap),等待客户端调用(bean的作用域为singleton,如果为property则不缓存直接返回)
Spring容器
bean工厂分为两种:
- BeanFactory,面向Spring
- ApplicationContext,基于BeanFactory基础,实现了一系列功能
两者区别?
- BeanFactory初始化bean采用懒加载,在获取的时候才创建;ApplicationContext启动时一次性全部加载,如果配置错误则无法启动容器,可以提前检测配置正确性,当然也导致容器启动速度慢
- 对于配置文件,ApplicationContext提供了访问URL和文件访问的接口
- ApplicationContext支持aop
- 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原理解析相关推荐
- Spring Ioc原理解析
Spring Ioc原理解析 IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦 ...
- Spring IOC 原理解析
Spring IOC 原理 ? IOC DI(依赖注入) **DI注入的几种方式** IOC容器 IOC原理 要想理解IOC,就需要知道一下IOC.DI 和IOC容器都是干什么的 IOC spring ...
- Spring Ioc原理及解析
IOC简介 IoC是Inversion of Control的缩写,多数书籍翻译成"控制反转",还有些书籍翻译成为"控制反向"或者"控制倒置" ...
- spring ioc原理分析
spring ioc原理分析 spring ioc 的概念 简单工厂方法 spirng ioc实现原理 spring ioc的概念 ioc: 控制反转 将对象的创建由spring管理.比如,我们以前用 ...
- Spring IOC 原理
Spring IOC原理 IOC理解 自己写的简单的IOC容器 IOC的原理 定位.加载.注册 基于XML配置的IOC容器初始化 1.寻找入口 2.获取配置路径 3.开始启动 4.创建容器 5.载入配 ...
- Spring Boot 原理解析—启动类包扫描原理
为了何更好的理解该篇内容,请先阅读Spring Boot 原理解析-入口SpringApplication. 我们知道在使用Spring Boot时,Spring会自动加载Spring Boot中启动 ...
- Spring IOC BeanDefinition解析
Spring IOC BeanDefinition解析 IOC(Inversion of Control)即控制反转,是说创建对象的控制权进行了转移,以前创建对象的主动权和创建时机是由自己把控的,而现 ...
- 解析Spring IOC原理——工厂模式与反射机制的综合应用
(一)工厂模式 从一个例子开始讲起: 首先我们建立一个Chinese.java类,该类的sayHelloWorld(String name)方法,用中文对名为name的人问好,其内容如下: [java ...
- Spring IOC原理 Bean标签解析和Definition封装
以下源码版本是 Spring 5.2.x IOC Inversion of Control 控制反转,关键实现是DI Dependency Injection,就必然涉及到有一个容器保存系统中所有托管 ...
最新文章
- hdu 1054(最小顶点覆盖)
- 张清:你hold住微博实名制吗?
- Showing multiple lines on a single chart in Node-RED
- 软件工程导论团队项目
- pyecharts x轴字体大小调整_pyecharts 柱状图基础篇#学习笔记#
- 1000道Python题库系列分享26(12道Pandas编程题)
- jQuery中的$.getJSON、$.ajax、$.get、$.post的区别
- java迷宫类编程题_第十届蓝桥杯省赛java类B组 试题 E:迷宫 (动态规划之回溯法)...
- TwoStep Cluster
- Fanuc机器人从控制柜导出GSD文件
- 使用Cloudflare API动态解析域名IP
- 图像处理基础:特征金字塔
- 网络挖掘初探索(2)_NEO4J图可视化
- 双屏、3屏拼接——A卡、N卡——Windows、Linux
- 宇视科技POE摄像机供电方式
- Todesk软件使用
- 开启snapshot的操作失败 如何解决——两种办法
- MySQL:Illegal mix of collations (utf8_general_ci,COERCIBLE) and (gbk_chinese_ci,IMPLICIT) for operat
- 个人网站选择支付宝api
- 选择适合的Node.js授权认证策略
热门文章
- 001@多用派发队列,少用同步锁
- 四大科技巨头跟随者众 智能家居市场容量可观
- mysql 用户已设置密码,但登录可以不填密码
- 由return联想到的
- List, Set, Map是否继承自Collection接口?
- Sockets programming in Python
- php培训12.22
- 计算机数据库基础知识笔记,计算机基础及技巧(我的电脑笔记,适合新手!包含使用电脑最基本的知识及DOS、网络及数据库等。)...
- iframe js 加载失败_如何提高Vue项目首页的加载速度
- MySQL常见的主从复制架构_如何搭建经典的MySQL 主从复制架构