Spring框架IOC容器底层原理详解
目录
- 1、什么是IOC
- 2、IOC容器的底层原理
- 3、那么上边提到的三种技术如何实现IOC的呢
- 4、IOC(接口)
1、什么是IOC
IOC – Inverse of Control,控制反转,将对象的创建权力反转给Spring框架!
在java当中一个类想要使用另一个类的方法,就必须在这个类当中创建这个类的对象,那么可能会出现如下情况, 比如A类当中创建着B对象,B类当中有C对象,C类当中有A对象,这个如果一个类出了问题,那么可能会导致这个框架出现问题。 Spring 将创建对象的权利给了IOC,在IOC当中创建了ABC三个对象吗,那么我们我们其他的类只需要调用集合, 大大的解决了程序耦合性的问题。
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。
解决问题:使用IOC可以解决程序耦合性高的问题。
2、IOC容器的底层原理
IOC的实现,依赖于以下3门技术
① dom4j解析xml文档;
② 工厂模式;
③ 采用反射设计模式创建对象
首先我们需要讲一下什么是工厂模式
在当前情况之下A类想要调用B类就必须自己在自己的内部新建B类的对象,这样的耦合度太高,那我们如何降低耦合度的呢?
创建一个工厂类,这样就能够使得A和B的耦合度降低到最小值
3、那么上边提到的三种技术如何实现IOC的呢
第一步:xml配置文件,配置创建对象
<bean id="demo" class="com.qcby.service.Demo" />
第二步:创建工厂类(ioc的核心原理)
public class DemoFactory { //利用dom4j得到name所对应的value值 public static Demo getDemo() throws Exception { //利用dom4j得到name所对应的value值 String value="class路径"; //通过反射创建对象 Class clazz = Class.forName(value); //返回并创建demo对象 return (Demo) clazz.newInstance(); } }
4、IOC(接口)
1.IOC思想是基于IOC容器完成的,IOC的底层就是对象工厂
2.Spring里边提供了IOC容器的实现的两种方式
(1) BeanFactroy:IOC容器是Spring内部的使用接口,不提供给开发人员使用
BeanFactroy:加载配置文件的时候不会去创建对象,在使用对象的时候才会去创建对
(2)ApplicationContext:BeanFactory接口的子接口,提供了更多更强大的功能,一般由开发人员进行使用
到此这篇关于Spring框架IOC容器底层原理详解的文章就介绍到这了,更多相关Spring IOC容器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
Spring IOC容器基于XML外部属性文件的Bean管理
目录 Spring IOC Bean管理XML 一.常规配置方法 1. 引入依赖 2. xml 文件配置数据库连接池 二.引入外部属性文件来配置数据库连接池 1. 创建外部文件 2. 引入外部文件到xml配置文件中 3. 引用外部文件里的属性 Spring IOC Bean管理XML 有时候,为了灵活方便,我们会把某些固定的数据存放到文件里,然后去读取里面的内容来使用. 比如数据库的连接信息,这些内容就可以放到 properties 文件中,然后使用 xml 配置文件去读取里面的内容,完成需要的
-
Java基础之Spring5的核心之一IOC容器
一.什么是IOC 1)控制反转,把创建对象和对象的调用过程交给Spring 管理. 2)使用IOC的目的,为了降低耦合度. 二.IOC的底层原理 XML解析.工厂模式.反射 三.IOC思想 基于IOC容器完成,IOC容器底层就是对象工厂. 四.Spring 提供IOC容器实现两种方式:(两个接口) (1)BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员使用 特点:加载配置文件的时候不会创建对象,在获取(使用)对象才去创建. (2)ApplicationCo
-
Spring IOC容器Bean管理XML注入集合类型属性
目录 一.定义数组.list.map.set类型属性 二.配置文件中进行对应配置 三.注入对象集合类型 四.提取注入集合的部分 1. 引入名称空间 util 2. 使用 util 标签完成集合注入的提取 一.定义数组.list.map.set类型属性 创建类.定义数组.list.map.set类型属性,生成对应set方法. package com.pingguo.spring5.collectiontype; import java.util.Arrays; import java.util.L
-
SpringIOC容器Bean的作用域及生命周期实例
目录 bean作用域 1. 默认单实例 2. 设置多实例 bean生命周期 一.生命周期过程示例 二.更完整的过程 1. 创建后置处理器 bean作用域 bean的作用域,其实就是设置创建 bean 的实例是属于单实例,还是多实例. 1. 默认单实例 默认情况下,创建的 bean 是单实例对象. 比如,用之前的代码为例: @Test public void testCollection2() { ApplicationContext context = new ClassPathXmlAppli
-
Spring IOC容器Bean注解创建对象组件扫描
目录 Spring IOC Bean注解对象组件扫描 一.spring 针对 bean 管理中创建对象提供注解 1. 引入依赖 2. 开启组件扫描 3. 创建类,并添加注解来创建对象 4. 测试一下 二.组件扫描的其他过滤条件 1. include-filter 2. exclude-filter Spring IOC Bean注解对象组件扫描 什么是注解? 注解是代码里的特殊标记,格式: @注解名称(属性名称=属性值, 属性名称2=属性值...) 可以作用在:类.方法.属性上面. 使用注解的目
-
Spring-IOC容器-Bean管理-基于XML方式超详解
目录 Spring-IOC容器-Bean管理-基于XML方式 Spring框架概述 IOC概念和原理 IOC 操作 Bean 管理(set方式注入&&使用有参构造进行注入) IOC 操作 Bean 管理(xml注入其他类型属性) IOC 操作 Bean 管理(xml注入集合属性) IOC 操作 Bean 管理(FactoryBean) IOC 操作 Bean 管理(bean 作用域) IOC 操作 Bean 管理(bean 生命周期) IOC 操作 Bean 管理(XML自动装配) IOC
-
关于Springboot如何获取IOC容器
目录 Springboot项目中获取IOC容器的方式 方法一(不实用,不推荐): 方法二(强烈推荐): 总结 Springboot项目中获取IOC容器的方式 在Springboot项目中如果要获取IOC容器目前有两种方法. 方法一(不实用,不推荐): 在Springboot项目中都会存在一个SpringApplication的启动类,我们通过以下代码启动IOC容器. SpringApplication.run(Application.class, args); 其实run方法会将创建的IOC容器
-
Spring-IOC容器中的常用注解与使用方法详解
Spring是什么? Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题.它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持.Spring负责基础架构,因此Java开发者可以专注于应用程序的开发. 体系结构 核心容器(Core Container):Spring的核心容器是其他模块建立的基础,有Spring-core.Spring
-
spring IOC容器的Bean管理XML自动装配过程
目录 什么是自动装配? 自动装配过程 1. 创建 2 个类 2. 配置文件 3. 测试方法 什么是自动装配? 在之前的内容中,每给属性注入值都要一个个的用 property 标签来完成,比如: <bean id="book" class="com.pingguo.spring5.collectiontype.Book" scope="prototype"> <property name="list" ref=
-
Spring框架IOC容器底层原理详解
目录 1.什么是IOC 2.IOC容器的底层原理 3.那么上边提到的三种技术如何实现IOC的呢 4.IOC(接口) 1.什么是IOC IOC – Inverse of Control,控制反转,将对象的创建权力反转给Spring框架! 在java当中一个类想要使用另一个类的方法,就必须在这个类当中创建这个类的对象,那么可能会出现如下情况, 比如A类当中创建着B对象,B类当中有C对象,C类当中有A对象,这个如果一个类出了问题,那么可能会导致这个框架出现问题. Spring 将创建对象的权利给了IO
-
Spring和Mybatis整合的原理详解
目录 前言 简单猜想 案例搭建 通过扫描接口 正式开始 setBeanName setApplicationContext afterProperties postProcessBeanDefinitionRegistry 总结 前言 最近读完了Spring的IOC部分的源码,受益匪浅,这篇文章讲解一下MyBatis是如何做到与Spring整合的.MyBatis是如何做到干扰Spring的生命周期,把Mapper一个个的注册到Spring容器中的将在这里揭秘. 简单猜想 因为阅读过Spring源
-
Spring框架对于Bean的管理详解
目录 什么是Bean管理 Bean管理操作的两种方式 基于注解的方式实现Bean管理和注入属性(常用) 1.什么是注解 2.Spring针对Bean管理中创建对象提供的注解 3.用注解的方式创建对象 4.用注解的方实现属性注入 什么是Bean管理 bean管理指的是如下的两个操作. 1.创建对象 2.注入属性 Bean管理操作的两种方式 1.基于xml配置文件的方式实现 2.基于注解方式实现 基于注解的方式实现Bean管理和注入属性(常用) 1.什么是注解 ①:注解是代码特殊标记,格式:@注解名
-
spring事务Propagation及其实现原理详解
本文研究的主要是spring事务Propagation及其实现原理,具体介绍如下. 简介 spring目前已是java开发的一个事实标准,这得益于它的便利.功能齐全.容易上手等特性.在开发过程当中,操作DB是非常常见的操作,而涉及到db,就会涉及到事务.事务在平时的开发过程当中,就算没有注意到,程序正常执行不会有副作用,但如果出现了异常,而又没有处理好事务的话,可能就会出现意想不到的结果.spring在事务方面进行了各种操作的封装,特别是声明式事务的出现,让开发变得更加的舒心.spring对事务
-
Spring框架学习之Cache抽象详解
目录 1.简介 cache和buffer 2.缓存抽象 3.spring缓存抽象与多进程 官方文档 8.0 Spring为不同缓存做了一层抽象,这里通过阅读文档以及源码会对使用以及原理做一些学习笔记. 1.简介 从3.1版开始,Spring Framework提供了对现有Spring应用程序透明地添加缓存的支持. 与事务支持类似,缓存抽象允许一致地使用各种缓存解决方案,而对代码的影响最小. 从Spring 4.1开始,通过JSR-107注释和更多自定义选项的支持,缓存抽象得到了显着改进. ca
-
Redis RDB技术底层原理详解
每日一句 低头是一种能力,它不是自卑,也不是怯弱,它是清醒中的嬗变.有时,稍微低一下头,或者我们的人生路会更精彩. 前提概要 Redis是一个的键-值(K-V)对的内存数据库服务,通常包含了任意个非空数据库.而每个非空的键值数据库中又可以存放任意个K-V,基本的结构如下图所示: Redis的强劲性能很大程度上是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中以某种形式同步到硬盘中,这一过程就是持久化. 我们知道redis中缓存的数据都存放在内存中
-
Java并发编程深入理解之Synchronized的使用及底层原理详解 下
目录 一.synchronized锁优化 1.自旋锁与自适应自旋 2.锁消除 逃逸分析: 3.锁粗化 二.对象头内存布局 三.synchronized锁的膨胀升级过程 1.偏向锁 2.轻量级锁 3.重量级锁 4.各种锁的优缺点 接着上文<Java并发编程深入理解之Synchronized的使用及底层原理详解 上>继续介绍synchronized 一.synchronized锁优化 高效并发是从JDK 5升级到JDK 6后一项重要的改进项,HotSpot虚拟机开发团队在这个版本上花费了大量的资源
-
Java并发编程深入理解之Synchronized的使用及底层原理详解 上
目录 一.线程安全问题 1.临界资源 2.线程安全问题 3.如何解决线程安全问题 二.synchronized使用介绍 三.synchronized实现原理 1.synchronized底层指令:monitorenter和monitorexit 2.Object Monitor(监视器锁)机制 一.线程安全问题 1.临界资源 多线程编程中,有可能会出现多个线程同时访问同一个共享.可变资源的情况,这个资源我们称之其为临界资源:这种资源可能是:对象.变量.文件等. 共享:资源可以由多个线程同时访问
-
python神经网络Batch Normalization底层原理详解
目录 什么是Batch Normalization Batch Normalization的计算公式 Bn层的好处 为什么要引入γ和β变量 Bn层的代码实现 什么是Batch Normalization Batch Normalization是神经网络中常用的层,解决了很多深度学习中遇到的问题,我们一起来学习一哈. Batch Normalization是由google提出的一种训练优化方法.参考论文:Batch Normalization Accelerating Deep Network T
-
spring IOC控制反转原理详解
目录 IOC概念 补:工厂模式和单例模式区别 IOC接口——实现IOC容器 1.BeanFactory 2.ApplicationContext IOC操作管理Bean xml配置bean 工厂Bean和普通Bean 注解配置bean 注册Bean 使用Bean Bean的配置 作用域:如何设置bean的单例or多例 生命周期:创建到销毁 Bean扫描 总结 IOC概念 定义:控制反转,把对象的创建和调用(传统方式是通过new之后直接使用对象),交给Spring进行管理(依靠对象工厂通过注入的方
随机推荐
- PHP魔术方法__GET、__SET使用实例
- SWT(JFace) 文本编辑器 实现代码
- 简单实现JS上传图片预览功能
- IOS 代理方式实现实例详解
- python3使用requests模块爬取页面内容的实战演练
- IE:如何使用断点续传功能
- 通过Python爬虫代理IP快速增加博客阅读量
- C#实现的WINDOWS登录功能示例
- 在python3环境下的Django中使用MySQL数据库的实例
- jQuery+CSS3实现3D立方体旋转效果
- asp.net下日期加减的方法
- jquery获取tr中控件值并操作tr实现思路
- 基于Jquery实现表格动态分页实现代码
- jquery实现简单的表单验证
- JQuery为页面Dom元素绑定事件及解除绑定方法
- ASP.NET 2.0 中收集的小功能点(转)
- PHP中怎样防止SQL注入分析
- Intel HAXM为Android 模拟器加速解决模拟器运行慢的问题
- android实现Uri获取真实路径转换成File的方法
- 微信小程序登录数据解密及状态维持实例详解