IOC

浅谈 IOC 什么是 IOC? 本文以文字为主题,并没有代码案例,仅限于记录自己对于 IOC 的理解,文中也啥特别高深的东西,大牛和大佬可以忽略本文,以免浪费您宝贵的时间 什么是 IOC ? IOC (Inversion Of Control,控制倒转),是spring的核心,贯穿始终,所谓IOC ,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。所有的类都会在spring容器中... 阅读详情
概述

IOC(控制反转) 是一种很设计思想,目的是为了指导我们设计出松耦合的程序

  • 控制 : 指的是对象的控制权,在java中可以理解为对象的控制权限(对象的创建,销毁等)
  • 反转 : 指的是对象的控制权由原来在程序员手中交给spring容器去管理
  • 总结来说 : 就是对象的控制权交给spring容器,由spring容器来管理对象的生命周期和对象之间的关系,程序员需要获取对象时去spring容器中获取
  • 主要功能是 : 降低了对象之间耦合度高,实现对象之间的解耦
  • IOC底层用的原理是 : 反射

我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用java的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

BeanFactory和ApplicationContext
BeanFactory
  • BeanFactory是IOC的心脏,
  • 是 IOC 容器的核心接口,它定义了IOC的基本功能。
  • 加载bean的配置,管理bean的生命周期,维护各个bean之间的关系
ApplicationContext
  • ApplicationContext是BeanFactory的子接口,可以比喻为spring的躯体
  • ApplicationContext在Beanfactory的基础上填加了新的功能:
  • 支持aop和web应用
  • MessageSource,提高国家化的消息访问
  • 通过配置来实现BeanFactory中很多编码才能实现的功能
  • ApplicationContext常用的API
  • ClassPathXmlApplicationContext : 从classpath目录中读取文件
  • FileSystemXmlApplicationContext : 从文件系统或者url中读取文件
  • AnnotationConfigApplicationContext : 当我们使用注解配置容器时,需要使用此类来创建spring容器,他来读取注解
  • 两者的区别:

面向群体

  • BeanFactory :是面向spring框架的基础设施,也就是供spring内部使用的
  • ApplicationContext:是面向spring框架的使用者

创建bean的时间

  • BeanFactory常见容器时并没有加载bean,只有使用者调用了getBean()方法时才会创建bean
  • ApplicationContext是加载容器启动时就会一次性加载所有的bean对象(优点就是让容器启动时就可以看出bean中的配置是否有报错,缺点技术加载的bean过多的话,会占用内存空间,减低效率)
生命周期
<!--
        定义配置信息
            id:唯一标志(获取的时候,调用容器的getBean("id"))
            class:实现类的全限定类名
            scope:对象作用域
                singleton : 单例(默认)
                prototype :多例
                request
                session
                global-session
         原理:
            通过反射调用,无参构造方法创建对象
    -->
    <bean id="userDao" class="cn.itcast.dao.impl.UserDaoImpl" scope="prototype" </bean>

singleton 单例模式 : 由容器控制生命周期,容器创建则对象创建,容器销毁则对象销毁
prototype 多例模式 : 调用getBean()方法时创建对象.spring无法销毁,由javacg(垃圾处理机制)负责销毁

DI 依赖注入

概述:
是spring框架核心IOC的具体实现,通过控制反转将对象的创建交给了容器,但是代码中不可能出现没有依赖的情况

IOC具有两个功能 : 依赖注入和依赖查找
本质 : 为对象中的私有属性赋值
形式:

  • set方式
    -有参构造方法
细说Spring——IoC详解(IoC概览) 一、前言 我之前写过一个专栏Sping+SpringMVC+Mybatis学习笔记,这个专栏主是我在学习SSM的一些笔记,但是这个专栏中只讲解了怎么使用Spring框架,但是却很少涉及Spring原理性的知识,为了弥补这个不足,我决定再开一个专栏,专门记录我对Spring原理性知识的了解,希望能够帮助Spring的初学者快速建立起对Spring框架的认知。 这里的很多知识都是通过阅读《Spri... 阅读详情

相关推荐

.NET的IOC依赖与注入,以及IOC原理

在C#中,IoC(控制反转)是一种设计原则,它允许将依赖关系从硬编码的代码中解耦,使得代码更加灵活、可测试和可维护。IoC的核心思想是将依赖关系的创建和管理交给外部容器或框架来处理,而不是由代码本身来管理。IoC依赖注入(DI)是IoC的一个实现方式,其中外部容器或框架负责创建对象、注入依赖关系,并管理它们的生命周期。通过依赖注入,可以将依赖关系从代码中分离出来,使得代码更加简洁、清晰,并能够更好地应对变化。

2202_75310477的博客 1472

深度理解依赖注入(Dependence Injection)(IOC,Inversion of control,控制反转)

今天分享一篇依赖注入的详细介绍博文,看完感觉受益颇多,推荐大家看看。 http://www.cnblogs.com/xingyukun/archive/2007/10/20/931331.html

一棵小树 479

理解IoC和DI

本文我会为大家介绍如何理解IoC和Di,已经为什么Spring会被叫作包含众多工具方法的IoC容器

ta_older的博客 2140

spring之控制反转(IOC)

1.什么是IOC IOC不是一门技术,而是一种设计思想。传统的Java开发是在对象里面使用到其它的对象时,直接new一个对象,这样的弊端是将控制对象的权力交给程序来控制。例如:假若要获取用户信息,我们需要在DAO层访问数据库,然后在Service层调用,假如用MySQL数据库访问,如下图所示。 在Service层调用Dao层的接口,如下图,需要new一个UserDao实现类。当我们的需求发生改变的时候,例如需要用到Oracle访问数据库的时候,我们需要修改Service层调用DAO层的代码 修改后的代码

qq_42646178的博客 753

关于 IOC

IOC(入侵指标)是检测网络攻击的关键证据,包括恶意IP、异常进程等特征。主要分为网络类(IP/域名)、文件类(哈希值)和行为类(异常操作)三大类。其核心价值是将抽象攻击转化为可检测指标,用于威胁检测、事件响应和攻击溯源。使用时需注意时效性、关联性和差异化,并通过"收集-验证-落地-迭代"闭环进行全生命周期管理。IOC需从威胁情报等多渠道获取,经交叉验证后自动化落地到安全设备,并持续更新以应对新型攻击手法。

Cby121353的博客 1550

PyTorch模型生产部署:ONNX/Triton导出与高可用架构实战

机器学习模型部署本质是训练环境与生产环境之间的运行时契约建立过程,涉及序列化协议、推理引擎兼容性、动态批处理及资源隔离等核心问题。ONNX凭借标准化算子集和跨框架支持,成为平衡兼容性、性能与可维护性的首选导出格式;Triton Inference Server则通过原生多框架支持、动态batching和热加载能力,显著提升GPU利用率与服务SLA保障水平。在金融风控、电商推荐等高要求场景中,基于ONNX+Triton+K8s的分层架构可稳定支撑千级QPS与毫秒级P95延迟,同时满足模型热更新、可观测性与版本

weixin_33857679的博客 448

【狂神说】Spring学习笔记(全)

Spring学习笔记1、Spring(2020-11-9)1.1 简介1.2 优点1.3 组成1.4 拓展2、IOC理论推导IOC本质3、HelloSpring 1、Spring(2020-11-9) 1.1 简介 SSH:Struct2 + Spring + Hibernate! SSM:SpringMVC + Spring + Mybatis! 官网:https://spring.io/projects/spring-framework#overview 官方下载地址:https://repo.sp

li643937579的博客 5万+

立创开源:基于STM32F407的大疆M30T无人机PSDK机载开发板硬件设计与飞行控制实现

本文详细介绍了基于STM32F407微控制器为大疆M30T无人机设计PSDK机载开发板的完整流程。从关键的E-Port接口电路设计、电源保护,到STM32最小系统搭建,再到通过PSDK实现与无人机的通信及基础飞行控制,提供了从硬件到软件的全栈实战指南,助力开发者快速入门无人机负载开发。

weixin_35649491的博客 401

【Spring】Spring学习笔记完整篇

spring学习笔记完整版

MS_SONG的博客 2846

GB28181协议实战:5分钟搞定海康摄像头SIP注册失败问题(附Wireshark抓包分析)

本文详细解析了海康摄像头在GB28181协议下SIP注册失败的7个关键原因及解决方案,包括网络可达性、鉴权参数、NAT穿越等核心问题。通过Wireshark抓包分析,提供快速定位方法,帮助工程师高效解决SIP注册失败问题,提升实时图像联调效率。

weixin_29212867的博客 555

案例:无人船测量点位数据+ArcGIS 10.6软件生成三维水下地形的两种方法

通常情况下,采用无人船进行水下地形测量,得到的是离散的,具有点号、日期、时间、东坐标(E)、北坐标(N)、水面高程、水下高程和水深等信息的点位数据,该数据一般由航带点位数据加水岸线组成,如下图所示: 原始点位数据格式如下: 下面讲解在ArcGIS软件中生成三维水下地形的两种常用方法。 一、构建不规则三角网(Tin) 1、创建Tin 生成的Tin: 2、Tin转栅格 Tin to Raster: 三维展示: 二、空间插值 栅格插值常用的方法有:克里...

智慧空间实验室 6750

spring框架--全面详解(学习笔记)

由 Spring IoC 容器管理的对象称为 Bean,Bean 根据 Spring 配置文件中的信息创建。可以把 Spring IoC 容器看作是一个大工厂,Bean 相当于工厂的产品,如果希望这个大工厂生产和管理 Bean,则需要告诉容器需要哪些 Bean,以及需要哪种方式装配 Bean。Spring 配置文件支持两种格式,即 XML 文件格式和 Properties 文件格式。

swy2560666141的博客 1万+

html2canvas - 解决截图后引入的字体样式丢失问题,第三方字体截图导出图片后字体失效,html2canvas截屏生成图片后艺术字体就丢失并且自动转成常规字体了,特殊字体显示不了无法截图怎么办

vue2,vue3,uniapp,html2canvas截图后引入的字体样式丢失,html2canvas艺术字截图不显示,使用外部字体无效,html2canvas无法识别网络字体文件怎么办,ttf文件,网页使用在线字体链接利用html2canvas无法截取,字体样式没有了,font-family第三方字体,@font-face引入本地字体文件后无法被html2canvas识别怎么办,html2canvas文字消失,vue页面正常显示艺术字体但截屏后没有,html2canvas截图存在特殊字体时截图不全,默认

✅ 精选推荐文章 1万+

浅谈IOC--说清楚IOC是什么

转载自:http://www.cnblogs.com/DebugLZQ/archive/2013/06/05/3107957.html1.IOC的理论背景2.什么是IOC3.IOC也叫依赖注入(DI)4.IOC的优缺点5.IOC容器的技术剖析6.IOC容器的一些产品7.参考博文本文旨在用语言(非代码)说清楚IOC到底是什么,没有什么高深的技术,园中的老牛、大虾们看到这里可以绕行了,以免浪费您宝贵的...

哲 27万+

Multi-Agent

Multi-Agent System(MAS,多代理系统)是分布式人工智能(DAI)领域皇冠上的明珠,其核心思想是通过多个自主、交互、目标导向的智能体(Agent)的协同与竞争,解决单智能体无法或难以高效处理的复杂问题——包括大规模资源调度、多模态数据理解与决策、复杂软件架构的自治运维、甚至未来城市级的交通与能源管理。本文将以结构化分析推理和第一性原理思考。

AI智能探索者的博客 407

CODESYS无扰切换PID(ST源代码)

/运行信号//手自动切换//设置值、目标值yk : REAL;// 实际值、反馈信号;// 开环给定值;// 比例增益;// 积分时间 单位S;Td : REAL;// 微分时间 单位S;//采样时间 单位S// 滤波时间 单位S;//中断周期 默认10msEND_VARVAR_OUTPUT//uk : REAL;//控制器输出;//上一时刻的实际值;uDk : REAL;

RXXW_Dor的博客 1401

【Spring IoC】容器和IoC介绍以及IoC程序开发的优势

容器是用来容纳某种物品的(基本)装置。生活中的水杯,垃圾桶,冰箱等等这些都是容器。我们想象,之前的内容中我们接触到了哪些容器?List/Map:数据存储容器Tomcat:Web 容器IoC是Spring的核心思想,也是常见的面试题。其实我们在前面已经使用过了IoC,在类上面添加注解,就是把这个对象交给Spring管理,Spring框架启动时就会加载该类。把对象交给Spring管理,就是IoC思想。

Yeeear的博客 3571

[QMT量化交易小白入门]-十二、QMT回测龙头打首板和连板的策略

class a():passA = a() #创建空的类的实例 用来保存委托状态field_list定义了需要的市场数据字段,而类a用于保存交易状态。

木头大左的博客 4760

一文读懂 IOC

9.1 总结控制反转(IOC)作为现代软件开发中的重要设计思想,通过容器的管理实现了模块解耦和依赖注入。它的核心价值在于解耦和灵活性,使得代码更容易维护、更具扩展性。IOC 的核心价值将对象的创建和依赖管理交由容器处理,降低模块间的耦合。容器支持运行时动态注入,便于调整和扩展依赖关系。模块之间关系清晰,代码更易读、更易维护。容器可以轻松替换依赖项为 Mock 实现,提升测试效率。IOC 的广泛应用。

hello.reader 4895

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IoC之IoC容器基本原理

上一篇学习了IoC的基础知识,明白了IoC是什么,为什么需要使用IoC以及IoC和DI的区别,接下来让我们继续往下学习IoC容器的基本原理。 IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC具有负责实例化,定位,配置应用程序中的对象及建立这些对象之间的依赖。应用程序无需直接new相关对象,应用程序通过IoC容器进行组装。在Spring中IoC容器实际代表者是BeanFactory。 ...

weixin_41676282的博客 6341

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IOC 概述

控制反转(Inversion of Control,简称IOC)是一种设计原则,它通过将对象的创建和管理权交给外部容器来实现对象之间的解耦。传统的编程模式中,对象的创建和依赖关系是由应用程序自己管理的,而在IOC中,这些工作由容器负责。这样可以提高代码的可维护性、可测试性,并降低代码的耦合度。依赖注入(Dependency Injection,简称DI)是实现IOC的一种具体方式,它通过将对象的依赖关系注入到对象中,来实现对象之间的解耦。

weixin_51052174的博客 1946

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Spring IOC

合并 Bean 定义,对父类的定义进行合并和覆盖,如果父类还有父类,会进行递归合并,以获取完整的 Bean 定义信息。如果是方法调用是不算循环依赖的,循环依赖必须要持有引用。实际开发中,我们如果在对象 A 内部去创建、修改或者注销另一个对象 B,这会导致对象之间非常复杂的依赖关系,不利于代码的维护更新。比如我们直接在上层类内调用了底层类的构造方法,一旦底层类的构造方法发生改变,就必须修改所有上层类的代码。设值注入:依赖的对象通过 setter 方法传入的,对象已经实例化,发生属性填充和依赖注入的时候。

2401_84881237的博客 1646

Spring Ioc源码引入:什么是IoC,IoC解决了什么问题

Spring IoC是什么,解决了什么问题

dasdjsdsa的博客 921

【javaWeb】Spring IOC

IoC不是什么技术,它是一种设计模式。它还有一个名字叫做依赖注入(Dependency Injection)。控制反转(Inversion of Control)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。从对象调用者角度又叫做依赖注入,即(DI),通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的容器,将其所依赖的对象的引用传递给它,也可以说,依赖被注入到对象中,这个容器就是我们经常说到IOC容器。Sping及SpringBoot框架的核心就是提供了一个。

精益求精 1761

IoC究竟是什么?——IoC的基础分析

我们再回顾一遍,我们吃到菜是个什么流程。自己做饭:想好要做的菜——自己准备原料——自己烹饪——成品餐馆:想好要吃的菜——给餐馆说——餐馆烹饪——成品我们自己设计一整套程序的时候,往往是有很多模块的,每个模块会相互协作使用,最终形成一个大的程序,我们需要自己一个一个将模块联系起来。这就是我们自己做菜的过程而控制反转IoC就是将所有需要的模块通过一个容器(可以理解为一个控制终端)联系起来,我们不需要思考这个模块会不会使用其他的模块才能完成,全部都由容器帮我们完成联系。

Somellllbody的博客 2894
上一篇: AOP
下一篇: spring事务
lemon20120331
博客等级 码龄9年 277粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon20120331

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值