轻松理解Java面试和开发中的IoC(控制反转)
发布时间 - 2026-01-11 02:16:15 点击率:次IoC的概念介绍

控制反转(IOC)模式(又称DI:Dependency Injection)就是Inversion of Control,控制反转。在Java开发中,IoC意 味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。
控制反转(Inversion of Control,英文缩写为IoC)是框架的重要特征,做到控制反转需要一个容器来实现,就是我们所说的IoC容器,最常见的IoC容器是Spring。
控制反转从字面意思看来不是很好理解,其实就是将创建管理对象的工作交给容器来做。在以前的编程中,创建一个对象需要显式的new出来,但是控制反转是在容器初始化(或者某个指定时间节点)时通过反射机制(上一篇文章有介绍)创建好对象,在使用时去容器中获取。将对象的控制权反过来交给容器管理,所以称之为“控制反转”。
一、IoC容器是怎么实现的呢?
IoC容器的底层实现其实是工厂模式,通过工厂模式和反射机制,根据XML中给出的类名生成相应的对象。其实IoC容器的实现很简单,就是一个HashMap,接下来,我们实现一个简单的IoC容器:
1.读取配置文件,并初始化容器
配置文件可以是XML或者properties文件,下面代码是读取两种配置文件创建实例,并放到容器中(容器的实现是HashMap):
(1)读取xml配置文件,创建实例放进容器的实现:
读取XML创建容器
(2)读取properties文件,创建实例放进容器的实现:
读取properties创建容器
2.ApplicationContextFactory工厂的实现(调用初始化容器的方法)
通过工厂创建应用上下文中配置的对象,在此工厂中判断是否存在XML或prop文件,并初始化容器:
ApplicationContextFactory工厂的实现
3.容器的使用
通过工厂创建完容器就可以使用了,调用getBean(String beanId)方法获取容器中的对象实例:
容器的使用
二、依赖注入(DI,Dependency Injection)和依赖查找(Dependency Lookup)是什么?
依赖注入和依赖查找是IoC的两种主要实现方式,我直接把依赖查找给扔了没去理解他,一般会把IoC和DI放在一起说。
其实可以把DI和IoC理解为同一件事,都是把创建实例的控制权交给容器来操作,只是两种叫法的角度不同:
控制反转是从代码操作对象的角度来看,将操作对象的控制权反转交给了容器;
依赖注入是从容器的角度看,我把你需要的对象或属性注入到你代码中去。
# java面试
# 控制反转
# ioc
# Java基础之Spring5的核心之一IOC容器
# Java开发到底为什么要用 IoC 和 AOP
# 使用Java注解模拟spring ioc容器过程解析
# 基于Java反射技术实现简单IOC容器
# 深入理解java的spring-ioc的使用
# Java使用IOC控制反转的三种设计模式详解
# 用java的spring实现一个简单的IOC容器示例代码
# Spring学习笔记1之IOC详解尽量使用注解以及java代码
# 详解JavaSE实现IoC
# 两种
# 配置文件
# 是在
# 是从
# 都是
# 很好
# 在此
# 是怎么
# 把你
# 而不
# 上一
# 给了
# 很简单
# 到你
# 一件事
# 会把
# 来做
# 中去
# 将你
# 来实现
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何登录建站主机?访问步骤全解析
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
网站制作价目表怎么做,珍爱网婚介费用多少?
如何获取上海专业网站定制建站电话?
音乐网站服务器如何优化API响应速度?
如何在IIS中配置站点IP、端口及主机头?
Laravel如何实现模型的全局作用域?(Global Scope示例)
三星、SK海力士获美批准:可向中国出口芯片制造设备
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
如何做网站制作流程,*游戏网站怎么搭建?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
如何在万网主机上快速搭建网站?
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
微信小程序 canvas开发实例及注意事项
如何打造高效商业网站?建站目的决定转化率
Laravel如何使用Blade组件和插槽?(Component代码示例)
网站图片在线制作软件,怎么在图片上做链接?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
Laravel如何处理异常和错误?(Handler示例)
如何在IIS7上新建站点并设置安全权限?
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
用v-html解决Vue.js渲染中html标签不被解析的问题
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何破解联通资金短缺导致的基站建设难题?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Bootstrap CSS布局之列表
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
香港服务器如何优化才能显著提升网站加载速度?
php485函数参数是什么意思_php485各参数详细说明【介绍】
微信小程序 scroll-view组件实现列表页实例代码
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
公司门户网站制作流程,华为官网怎么做?
微信小程序 require机制详解及实例代码
jQuery validate插件功能与用法详解
浅谈javascript alert和confirm的美化
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Windows Hello人脸识别突然无法使用
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Swift中swift中的switch 语句

