IoC详解

海康威视iVMS-8700综合安防管理平台 文件读取漏洞复现 HIKVISION iVMS 综合安防管理平台download接口处存在任意文件读取漏洞,攻击者通过构造token绕过身份认证,读取服务器中的目录信息与敏感文件。使系统处于极不安全的状态。 阅读详情

1.定义:IoC是一种模式。IoC(Inversion of Control)中文译为控制反转(即“不用你找,我来提供给你”)。控制反转意味着在系统开发过程中,设计的类将交由容器(spring中是通过applicationContext.xml控制的)去控制,而不是在类的内部去控制,类与类之间的关系将交由容器处理,一个类在需要调用另一个类时,只要调用另一个类在容器中注册的名字就可以得到这个类的实例,与传统的编程方式有了很大的不同。Martin Fowler在他的一篇文章中给IoC起了一个更为直观的名字:依赖注射DI(Dependency Injection)。

2.引入IoC:在设计模式中,我们已经习惯一种思维编程方式:Interface Driven Design 接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一定是需要实现的,也就是如下语句迟早要执行:InterfaceA a = new InterfaceAImp();  InterfaceAImp是接口InterfaceA的一个子类,IoC模式可以延缓接口的实现,根据需要实现,有个比喻:接口如同空的模型套,在必要时,需要向模型套注射石膏,这样才能成为一个模型实体,因此,我们将人为控制接口的实现成为注射(而工厂模式DAOFactory实际是返回的new InterfaceAImp(),即接口的实现类,所以工厂模式可理解为统一注入所有石膏,然后再调用)。

IoC模式是解决调用者和被调用者之间的一种关系,上述InterfaceA实现语句表明当前是在调用被调用者(即InterfaceAImp),由于被调用者名称写入了调用者的代码中,这产生了一个接口实现的原罪:彼此联系,调用者和被调用者有紧密联系,在UML中是用依赖(Dependency)表示。但是这种依赖在分离关注的思维下是不可忍耐的,必须切割,实现调用者和被调用者解耦,新的Ioc模式依赖注射(Dependency Injection)模式由此产生了,也就是将依赖先剥离,然后在适当时候再注射进入。

在Spring中,applicationContext.xml实际就是一个大工厂(这个大工厂的出现,免去了我们针对多个接口,需要定义多个工厂的烦恼);此外,与传统工厂不同,applicationContext.xml是基于IoC的工厂,是更为解耦合的工厂。

3.举例(网上选录)

1)就好比一个皇帝和太监。有一天皇帝想幸某个美女,于是跟太监说,今夜我要宠幸美女。皇帝往往不会告诉太监,今晚几点会回宫,会回哪张龙床,他只会告诉太监他要哪位美女,其它一切都交由太监去安排,到了晚上皇帝回宫时,自然会有美女出现在皇帝的龙床上,这就是控制反转,而把美女送到皇帝的寝宫里面去就是注射,太监就是是框架里面的注射控制器类BeanFactory(在Spring中, 太监相当于applicationContext.xml),负责找到美女并送到龙床上去,整个后宫可以看成是Spring框架,美女就是Spring控制下的接口实现(eg: JavaBean)。

而传统的模式就是一个饥渴男去找小姐出台,找领班,帮助给介绍一个云云,于是领班就开始给他张罗介绍一个合适的给他,完事后,再把小姐还给领班,下次再来。这个过程中,领班就是查询上下文Context(也就是一个负责提供小姐的工厂),领班的一个职能就是给客户找到他们所要的小姐,这就是lookup()方法,领班手中的小姐名录就是工厂类中的各个接口子类,也可以说是JNDI(Java Naming and Directory Interface)。小姐就是接口子类的实现Impl,饥渴男是客户端,青楼是Web容器。

看到区别了么?饥渴男去找小姐出台很麻烦,不仅得找,用完后还得把小姐给还回去,而皇帝爽翻了,什么都不用管,交给太监去处理,控制权转移到太监手中去了,而不是皇帝,必要时候由太监给注射进去就可以了。这就是Spring的美妙中的IoC的美妙之处。

2)设计Girl类和Boy类,其中Girl有kiss()方法,即Girl想要kiss()一个Boy。那么,我们的问题是,Girl如何能够认识这个Boy?在我们中国,常见的MM与GG的认识方式有以下几种:(1)青梅竹马;(2)亲友介绍;(3)父母包办。那么哪一种才是最好呢?

  1. public class Girl { //青梅竹马:Girl从小就知道自己的Boy
  2.      public void kiss() { 
  3.           Boy boy = new Boy();
  4.           boy.kissedByGirl();
  5.      } 
  6. }
  7. //然而从开始就创建的Boy缺点就是无法在更换。并且要负责Boy的整个生命周期。如果我们的Girl想要换一个怎么办?(严重不支持Girl经常更换Boy-_-~)
  8. public class Girl { //亲友介绍:由中间人负责提供Boy来见面
  9.      public void kiss(){ 
  10.           Boy boy = BoyFactory.createBoyById(int id);
  11.           boy.kissedByGirl(); 
  12.      }
  13. } 
  14. //实现了工厂(即亲友),这样就将Boy的创建和使用分离开来。如果不满意,尽管另外换一个好了(自己喜欢什么id的Boy,就按照这个id找一个出来)。但是,我们还要处理好与亲友(BoyFactory)的关系,实在是太繁琐了(我为什么一定要这个亲友掺和进来呢?为什么一定要付给她介绍费呢);而且亲友(BoyFactory)经常是以Singleton的形式或者static(Globals)形式出现,这样这个亲友就可以到处去调用createBoyById(int id)方法(万一其她girls爱上了我的男朋友呢?)
  15. public class Girl { //父母包办:一切交给父母,自己不用费吹灰之力,只需要等着Kiss就好了
  16.      public void kiss(Boy boy){ 
  17.           boy.kissedByGirl();
  18.      } 
  19. } 
  20. //Well,这是对Girl最好的方法,只要想办法贿赂父母,把Boy交给她。那么就可以轻松的Kiss Boy了。看来几千年传统的父母之命还真是有用哦。

这就是IOC,将对象的创建(青梅竹马模式)和获取(亲友介绍, 即工厂模式)提取到外部。由外部容器提供需要的组件。好莱坞有句名言:"Do not call us, we will call you.", 意思就是:"You, girl, do not call the boy. We will feed you a boy."

面向接口编程(也可以理解为面向抽象编程)是面向对象的核心。一般来说,组件应该分为两部分,即Service(所提供功能的声明)和ServiceImpl(Service的实现)。面向接口好处是:多种实现可以任意切换,防止"everything depends on everything"问题(即具体依赖于具体)。所以,我们的Boy应该是实现Kissable接口。这样一旦Girl不想kiss可恶的Boy的话,还可以kiss可爱的kitty和慈祥的grandmother。下面更进一步看各种框架下Girl得到Boy的不同方式:

  1. public class Girl { 
  2.      private Kissable kissable; 
  3.      public Girl() { 
  4.           kissable = new Boy(); 
  5.      } 
  6.      public void kissYourKissable() { 
  7.           kissable.kissedByGirl(); 
  8.      } 
  9. } 
  10. //未用IoC模式,Girl自己建立自己的Boy,很难更换,很难共享给别人,只能单独使用,并负责完全的生命周期。
  11. public class Girl implements Servicable { 
  12.      private Kissable kissable; 
  13.          public void service(ServiceManager mgr) { 
  14.           kissable = (Kissable) mgr.lookup("kissable"); 
  15.      } 
  16.      public void kissYourKissable() { 
  17.           kissable.kissedByGirl(); 
  18.      } 
  19. } 
  20. //Avalon Framework框架(过期)的IoC实现方式:实现Servicable接口就必须实现service()方法,并传入一个ServiceManager。其中会含有需要的其它组件。只需要在service()方法中初始化需要的Boy。 
  21. public class Girl { 
  22.      private Kissable kissable; 
  23.      public void setKissable(Kissable kissable) { 
  24.           this.kissable = kissable; 
  25.      } 
  26.      public void kissYourKissable() { 
  27.           kissable.kissedByGirl(); 
  28.      }
  29. } 
  30. //Spring Framework框架的IoC实现方式:通过JavaBean的set方法来将需要的Boy传递给Girl。它必须依赖于配置文件。 
  31. public class Girl { 
  32.      private Kissable kissable; 
  33.      public Girl(Kissable kissable) { 
  34.           this.kissable = kissable; 
  35.      } 
  36.      public void kissYourKissable() { 
  37.           kissable.kissedByGirl(); 
  38.      } 
  39. } 
  40. //PicoContainer组件的IoC实现方式:通过构造函数传递Boy给Girl。
利用CAT12做皮层指标的统计分析及可视化笔记记录 利用CAT12做皮层指标的统计分析及可视化 文章目录利用CAT12做皮层指标的统计分析及可视化前言一、统计步骤1.Basic Models2.Estimate Surface Models3.Results二、可视化1.t值可视化2.p值可视化 前言 本来没有打算做SBM的,因为自己是新手小白,许多操作都不太懂,但最后还是打算做一下,于是就从上周末开始将很久之前跑VBM得到的surf文件夹中的数据捡起来继续做皮层分析,因为之前看了一个博主的博客,关于如何做SBM已经讲得非常清楚了,但是在统计及可视化这里,我 阅读详情

相关推荐

AI辅助专利撰写实战:30分钟高效产出发明专利初稿

在技术创新的浪潮中,专利撰写常常是开发者将创意转化为知识产权保护壁垒的关键一步,但这个过程往往耗时费力,需要兼顾技术深度与法律文书规范。近期,借助AI辅助工具来提升专利撰写效率已成为一个热门探索方向。本文将围绕如何利用AI工具,在30分钟内高效完成一篇具备授权潜力的发明专利初稿,进行一场从0到1的实战演练。无论你是独立开发者、初创团队的技术负责人,还是希望保护自己研究成果的学生,这套方法都能帮助你快速梳理技术方案,形成结构严谨、逻辑清晰的专利申请文档。 1. 背景与核心概念:AI辅助专利撰写的价值与边界 在

weixin_34253126的博客 494

史上最全讲解:IOC

什么是IOC 通俗易懂的理解IOC 由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IO...

lynn_123456的博客 810

手持式激光测距仪全套方案

激光测距全套方案,包括原理图、源代码、PCB、BOM、光学部分资料,结构、特殊元件数据手册及供应商联系方式,提供调试技术文档。全套方案已成功打板验证,实现0.05~50m测量范围,精度在+/—1.5mm,激光波长635~650nm,功率《1mW。方案预留了TTL串口、RS485接口,可通过串口助手看到测量数据,可自行DIY或者商业开发。无论是电路小白,还是技术大拿,都能通过方案资料成功做出一套激光测距仪。

Laser01的博客 2055

Spring系列--IOC详解

IOC笔记总结

qq_42194397的博客 3012

Frida实战:高效dump Android内存中的so文件与修复技巧

本文详细介绍了使用Frida工具dump Android内存中已解密so文件的实战技巧。针对加固应用静态分析失效的痛点,文章提供了从环境搭建、使用frida_dump脚本自动化抓取内存数据,到利用SoFixer工具修复ELF文件结构的完整流程,帮助逆向分析人员高效获取可分析的so文件。

tt34567的博客 527

Linux中断子系统分析之(四):驱动程序申请中断

中断子系统中有一个重要的设计机制,那就是Top-half和Bottom-half,将紧急的工作放置在Top-half中来处理,而将耗时的工作放置在Bottom-half中来处理。 如果中断不分上下半部处理,那么意味着只有等上一个中断完成处理后才会打开中断,下一个中断才能得到响应。当某个中断处理处理时间较长时,很有可能就会造成其他中断丢失而无法响应,影响系统性能。 中断分成上下半部处理可以提高中断的响应能力,在上半部处理完成后便将中断打开,这样就可以响应其他中断了,等到中断退出的时候再进行下半部的处理。为了进

m0_46525308的博客 1225

IOC详解

IOC的含义: Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。 在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。 DI—Depende...

weixin_47586838的博客 890

Ollama最新快速上手指南:从安装到精通本地AI模型部署

想让Ollama跑你的"私房模型"?三种主流格式全支持,总有一款适合你!GGUF格式(推荐新手首选)创建Modelfile文件:执行创建命令:运行你的专属模型:PyTorch/Safetensors格式(适合进阶玩家)先用库测试模型能否正常加载确保模型结构完整后再导入Ollama官方文档有详细转换指南专业小贴士GGUF格式最轻量,PyTorch最灵活,Safetensors最安全遇到问题?试试用llama.cpp进行格式转换7B参数模型推荐使用q4_0量化级别想让AI用马里奥。

全世界的博客 2309

ioc简述(快速了解ioc及使用)

ioc简述(快速了解ioc及使用)

X2822889732的博客 1864

遥感大模型核心技术之自监督预训练技术研究(2025年9月版)

本文系统探讨了自监督预训练技术在遥感大模型构建中的核心作用。随着遥感数据进入"大数据"时代,传统监督学习面临"数据丰富、标签贫乏"的瓶颈,而自监督预训练通过设计代理任务从无标签数据中学习特征表示,成为驱动大模型发展的关键引擎。文章分析了遥感领域对自监督预训练的三大独特挑战:多源异构性、地理空间约束和时空动态性,并提出了针对性解决方案:掩码自编码(MAE)技术及其演进、地理对比学习与多模态融合、位置感知预训练与多任务学习。

panshengwu的博客 842

国产数据库安装部署说明

国产数据库安装部署说明

weixin_38203586的博客 908

Spring框架IoC核心详解

Spring框架IoC核心详解 https://baijiahao.baidu.com/s?id=1613047743708688271&wfr=spider&for=pc

lizhe10177的专栏 334

信号与电源完整性5:轨道塌陷噪声/电源轨道噪声分析及降低解决方案

经过上一节关于串扰的分析,我们已经清楚,噪声问题不仅仅来源于信号网络;电源和地网络所产生的噪声,被反馈到其所在的元器件和信号网络时,其破坏力也是巨大的;本节所讨论的轨道塌陷噪声就是一个典型的实例。在经过电源的地网络的电流发生改变时,在电源和地之间的阻抗上将产生一个压降;由于该压降的产生,用电元件的电压将直接被拉低,甚至可能对电路产生功能性的错误。接下来硬小二将详细的分析电源轨道噪声和降低其的解决方法。...

fydar的博客 2241

【Spring】一问详解什么是Spring IoC和DI

一问详解什么是spring ioc

Hanson的博客 1146

SAP B1中文培訓教材_SDK

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IOC与AOP详解

IOC与AOP详解 转载:IOC与AOP概念 手写实现IOC和AOP

weixin_44175482的博客 172

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring IoC详解

对于同一个类,如何定义多个对象呢?我们看下@Bean的使用@Component@Bean@Bean定义了多个对象的话,我们根据类型获取兑现,获取的是哪个对象呢?运行结果:报错信息显示: 期望只有一个匹配,结果发现了两个,user1,user2接下来我们根据名称来获取bean对象运行结果:可以看到,@Bean可以针对同一个类,定义多个对象.

2302_79392547的博客 1166

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JavaEE进阶(5)Spring IoC&DI:入门、IoC介绍、IoC详解(两种主要IoC容器实现、IoC和DI对对象的管理、Bean存储、方法注解 @Bean)、DI详解:注入方式、总结

JavaEE进阶(5)Spring IoC&DI:入门、IoC介绍、IoC详解(Spring的两种主要IoC容器实现、IoC和DI对于对象的管理、Bean的存储、类注解之间的关系、学习分析错误日志、方法注解 @Bean)、DI详解(属性注入、构造方法注入、Setter注入、@Autowired存在问题)、总结(Spring, Spring Boot 和Spring MVC的关系以及区别、Bean的命名、常见面试题)

m0_74343467的博客 1488

Spring IOC详解

Spring的IoC容器和依赖注入机制为Java应用程序提供了强大的解耦能力。通过将对象的创建和依赖管理交给容器,开发者可以更专注于业务逻辑的实现。IoC容器不仅简化了对象的创建和管理,还通过自动装配和作用域管理提供了灵活的配置选项。理解并掌握Spring的IoC容器对于构建可维护、可测试的应用程序至关重要。版权声明:本博客内容为原创,转载请保留原文链接及作者信息。参考文章Spring中的控制反转(IoC)和依赖注入(DI)一篇文章讲透spring ioc (概念、原理、实例、应用场景、面试题)

ning的博客 1619

Spring IOC 详解

Spring IOCIOC什么是IOCIOC容器介绍BeanFactory和ApplicationContext的区别Spring容器管理对象Spring依赖(pom.xml)Spring的配置文件Bean类的实例化方式(demo)创建实例类基于xml配置文件实现Bean基于无参构造函数实例化静态工厂方式实例化基于普通工厂方法实例化基于注解的方式装配Beanspring配置文件引入context约束实例类上添加注解 IOC 什么是IOC Ioc—Inversion of Control,即“控制反转”,不是

SunStaday的博客 490

Spring中的IOC详解

单例Bean和多实例Bean的生命周期主要区别在于实例化和销毁的管理方式,单例Bean在容器启动时创建一个实例,并由容器负责管理其生命周期的完整过程。在Spring框架中,Bean是应用程序的核心组件,它们由Spring容器创建、组装和管理,以帮助开发者实现松耦合、可测试和可维护的代码。IOC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。Bean的自动装配是Spring框架提供的一种便捷的方式,用于自动解析和设置Bean之间的依赖关系,而无需显式配置每一个依赖关系的方式。

2509_94096675的博客 597

IoC 和 DI 详解

IoC和DI详解

qq_67549203的博客 770

IOC概念的详解

1.1.IOC是什么?        Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。 ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由...

菜鸟不会飞 1万+

【javaEE】IOC详解

通过上篇的文章,我们已经知道了和DI的基本操作,接下来我们来系统的学习SpringIoC和DI 的操作.

mr_yuanshen的博客 1349

Spring中IOC详解

一、IOC的原型 IOC ----控制反转 比如我们有一个功能是获取用户数据,我们使用Dao层实现这个功能,再在Service层调用这个功能。但是我们每增加一个接口,比如获取mysql中的数据,就要修改原来的代码,如果再增加一个新的接口,又需要去service实现类中修改对应的实现。 解决方法 用户实际调用的是业务层,dao层他们不需要接触 UserServiceImpl userService = new UserServiceImpl(); userSe

qq_41359998的博客 1万+

Spring IOC的原理及详解

[Spring框架]Spring IOC的原理及详解。 看后 受益匪浅,这里再重温一遍Spring IOC 1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。 图1:软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从...

Yoke 323
上一篇: 工厂模式
下一篇: struts2的action基础
ForWayfarer
博客等级 码龄20年 60粉丝 96原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值