Java - 什么是IoC和DI?DI是如何实现的?
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net
IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠释。控制反转是把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的"控制反转"就是对组件对象控制权的转移,从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。IoC体现了好莱坞原则 - "Don’t call me, we will call you"。依赖注入的基本原则是应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由容器负责,查找资源的逻辑应该从应用组件的代码中抽取出来,交给容器来完成。DI是对IoC更准确的描述,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。
举个例子:一个类A需要用到接口B中的方法,那么就需要为类A和接口B建立关联或依赖关系,最原始的方法是在类A中创建一个接口B的实现类C的实例,但这种方法需要开发人员自行维护二者的依赖关系,也就是说当依赖关系发生变动的时候需要修改代码并重新构建整个系统。如果通过一个容器来管理这些对象以及对象的依赖关系,则只需要在类A中定义好用于关联接口B的方法(构造器或setter方法),将类A和接口B的实现类C放入容器中,通过对容器的配置来实现二者的关联。
依赖注入可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现,Spring支持setter注入和构造器注入,通常使用构造器注入来注入必须的依赖关系,对于可选的依赖关系,则setter注入是更好的选择,setter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象。
Java - 什么是IoC和DI?DI是如何实现的?相关推荐
- [Java] 什么是IoC?什么是DI?它们的区别是什么?
文章目录 前言 IoC IoC的两种应用 IoC容器 约定大于配置 IoC容器的优点 应用流程框架 DI 结语 参考 前言 学习应用程序框架永远绕不过的一个话题就是控制反转(IoC)和依赖注入(DI) ...
- ioc中最基本的JAVA技术_Spring IOC 知识点总结
广义的 IOC 在这之前,我们先记住一句话.好莱坞原则:Don't call me, we will call you. 即"不用打电话过来,我们会打给你". 控制反转(Inver ...
- Java反射及 IoC原理、内省机制
JAVA反射及IoC原理.JAVA内省 1. 反射 反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述 主要指程 ...
- 详解(Spring Ioc)本质 DI
Ioc本质 控制反转Ioc,是一种设计思想,而不是一种新的技术.DI(依赖注入)是实现Ioc的一种方法,也有人认为DI只是Ioc的另一种说法.在没有Ioc的程序中,使用面向对象编程,对象的创建与对象之 ...
- Ioc模式(又称DI:Dependency Injection 依赖注射)
分离关注( Separation of Concerns : SOC)是Ioc模式和AOP产生最原始动力,通过功能分解可得到关注点,这些关注可以是 组件Components, 方面Aspects或服务 ...
- Rhyme/Spring是如何简化Java开发的(POJO、DI、AOP、模板)
Spring是如何简化Java开发的 Spring是为了解决企业及应用的复杂性而创建的,使用spring创建的pojo对象,也就是简单的java类,可以完成原来只有重量级的EJB对象才能完成的操作. ...
- Java Spring的IoC和AOP的知识点速记
Spring简介 Spring解决的最核心的问题就是把对象之间的依赖关系转为用配置文件来管理,这个是通过Spring的依赖注入机制实现的. Spring Bean装配 1. IOC的概念以及在Spri ...
- java ioc_Java体验IOC
1.我们来体验一下Spring底层两大思想中IOC(Inverse Of Control) 2.IOC控制反转主要利用的就是Java强大的反射机制 这里并没有写数据层,有兴趣的同学可以通过流的方式,来 ...
- Java之Spring5:IOC容器
IOC容器 什么是IOC容器 IOC容器中的Bean 小试牛刀 搭建Spring5环境 写一个HelloWorld IOC底层原理 IOC的Bean管理 基于 xml 方式创建对象 基于 xml 方式 ...
最新文章
- 白盒测试之基本路径覆盖测试
- java lambda 应用场景,Java中Lambda的使用范围
- Bmob云IM实现头像更换并存入Bmob云数据库中(1.拍照替换,2.相册选择)
- 微软2014编程之美初赛第一场——题目3 : 活动中心
- spring cloud+dotnet core搭建微服务架构:服务发现(二)
- 万字长文:对账系统从入门到精通(建议收藏)
- 好云推荐官丨飞天加速之星怎样选择云服务器ECS?
- SylixOS启动读取配置文件
- 【CCCC】L3-015 球队“食物链” (30分),搜索排列
- 图数据库实战 AWS Neptune Gremlin CloudFormation
- java实习每周总结
- 计算所汉语词性标记集
- Ubuntu系统如何连接WiFi
- 深入理解Java内存模型(五)——锁
- 论文分享——Dynamic graph attention for referring expression comprehension
- python爬取公众号历史文章
- 【html】前端页面可视化设计工具总结
- 尚硅谷java练习题to循环
- 【git】当git出现On branch master Changes not staged for commit:
- 我下载了python所有包,24个G,用以备份
热门文章
- 创客学院 level1第一节学习完成(第一次写博客)
- 关于zookeeper启动失败,个人解决经验
- 使用react脚手架创建 tsx版本,react添加typescript
- 手机修图软件测试,Snapseed手机修图软件免费版
- SRRC认证的周期、费用多少?要什么资料?
- 事还得慢慢做,环境还得靠自己准备
- 联想电脑linux系统还原,联想怎么一键还原_一键还原电脑系统的通用方法 - 驱动管家...
- LTE 中的基础概念
- 有谁还在说入门大数据难?从spark开始带你起飞
- 稳压二极管工作原理、重要参数意义和典型电路参数计算