依赖注入

2023-05-16

举个例子,组件A中有类ClassA,组件B中有接口IB和其对应的实现类B1和B2。

那么,现在ClassA需要利用IB接口来做一些事情,例如:


public class ClassA {
    public void DoSomething() {
        IB b = ???
        b.DoWork();
    }
}  

现在的问题来了,IB b = ??? 中这三个???要写什么代码?是要写成 IB b = new B1(),还是要写成IB b = new B2() ?

不管是哪一种,都会让ClassA强依赖于IB的实现。

在上面这种方案中,ClassA通过new一个B1或B2来实现对IB的依赖的获取,换句话说,ClassA在主动获取依赖。

这样的设计会让ClassA很难扩展,那我们要改良设计:使用依赖注入。上面说到了,问题出在new这里,也就是依赖是Class去主动获取的,那我们就要解决这个问题:不要去主动获取对IB的依赖(通过new),而让这个依赖从ClassA的外面“注入”进来。注入有多种方式,比较常用的一种是通过构造函数注入,那么,我们要把ClassA改成:


public class ClassA {
    private IB b;

    public ClassA(IB b) {
        this.b = b;
    }

    public DoSomething() {
        this.b.DoWork();
    }
}  

可以看到,通过把IB这个依赖从构造函数中“注”进来后,ClassA就不依赖IB的实现了。还可以发现,这个重构过程中,我们是把"ClassA主动获取对IB的依赖”变成“把对IB的依赖从外部注入到ClassA中”,依赖的方向反转了,所以,依赖注入又称“控制反转”。

上面是依赖注入的所有内容。依赖注入不涉及任何反射、IoC框架(如Unity, Autofac)等内容。要注意这点

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

依赖注入 的相关文章

  • spring依赖注入

    目录 1 使用bean标签注入 1 pom xml文件配置 2 spring配置文件 xff08 存放bean spring注解等相关信息的文件 xff09 3 bean标签生成对象 4 对象的依赖注入 1 通过set方法 xff1a xf
  • Angular2文档学习的知识点摘要——依赖注入

    目录 目录依赖注入 xff08 DI xff09 为什么需要依赖注入 xff1f Angular 依赖注入 配置注入器在 NgModule 中注册提供商在组件中注册提供商该用NgModule还是应用组件 xff1f 注入服务显性注入器的创建
  • spring的依赖注入

    一 点睛 控制反转和依赖注入在Spring环境下是等同的概念 xff0c 控制反转是通过依赖注入实现的 所谓依赖注入指的是容器负责创建对象和维护对象间的依赖关系 xff0c 而不是通过对象本身负责自己的创建和解决自己的依赖 依赖注入的主要目
  • 依赖注入

    举个例子 xff0c 组件A中有类ClassA xff0c 组件B中有接口IB和其对应的实现类B1和B2 那么 xff0c 现在ClassA需要利用IB接口来做一些事情 xff0c 例如 xff1a public class ClassA
  • Spring_ 依赖注入 详细讲解

    文章目录 一 什么是依赖注入 xff1f 1 类的关系1 1 依赖关系 xff08 Dependency xff09 1 2 聚合 xff08 Aggregation xff09 2 关系强度 二 为什么使用依赖注入 xff1f 1 开闭原
  • 没有为该对象定义无参数的构造函数(MVC 之DefaultControllerFactory 依赖注入)

    Asp net mvc2中提供很多可以扩展的地方 xff0c 利用这些扩展之后 xff0c asp net mvc使用起来更加灵活 Simone Chiaretta曾写过一篇文章 xff1a 13 ASP NET MVC extensibi
  • .Net6.0系列-8 依赖注入(一)

    依赖注入 Dependency Injection DI 是控制反转 Inversion of Control IOC 思想的实现方式 依赖注入简化模块的组装过程 降低模块之间的耦合度 DI的几个概念 服务 Service 和框架请求之后返
  • Field injection is not recommended 依赖注入方式

    参考文章 http vojtechruzicka com field dependency injection considered harmful 首先对于还不熟悉 Autowired的同学当然也包括我先去看看它到底有什么作用 自动装配
  • koin框架预研文档

    背景 koin框架简介 Koin框架 适用于使用Kotlin开发 是一款轻量级的依赖注入框架 无代理 无代码生成 无反射 相对于dagger 而言更加适合Kotlin语 引入目的 目前app比较常用的是dagger框架 dagger框架属于
  • 何为依赖注入(DI)?

    何为依赖注入 DEPENDENCY INJECTION 平常在写代码的时候 经常会在一个类中写出这样的一段代码 以 PHP 代码展示
  • 控制反转及Bean装配的几种方式

    控制反转及Bean装配的几种方式 Spring两大基础核心 一是控制反转 二是依赖注入 控制反转和依赖注入 控制反转 通俗来讲 就是将bean的创建和销毁交由另一个东西全权管理 这个东西叫做Spring容器 一般来说 在Spring应用中
  • 依赖注入学习总结1

    生活中的 控制反转 自己发电和用电网的电 自己发电需要自购发电机 自学发电方法 维护发电设备等等 用电网的电只需要付费就可以直接使用 依赖注入 Dependency Injection DI 是控制反转 Inversion of Contr
  • Spring依赖注入

    内容主要来自 Spring实战 第二章 区别在于自己写了一个测试类 对于初学者更容易理解依赖注入 先定义两个接口 1 CompactDisc java package soundsystem public interface Compact
  • 【Spring】Spring依赖注入与控制反转理解

    Spring是一个庞大的框架 封装了很多成熟的功能 能够让我们无需重复造轮子 其次 它使用IOC进行依赖管理 利用JAVA的反射机制 将实例的初始化交给Spring Spring可以通过配置文件管理实例 我们就不用自己初始化实例啦 有人会问
  • Spring源码分析(十一)依赖注入源码解析4:DefaultListableBeanFactory#findAutowireCandidates 根据类型查找所有候选Bean

    根据类型查找所有候选Bean org springframework beans factory support DefaultListableBeanFactory findAutowireCandidates protected Map
  • Koin--适用于Kotlin的超好用依赖注入框架,Dagger替代者,Koin史上最详细解说,一篇就够了,妈妈再也不用担心我不会依赖注入了

    今年呆在家中实在无聊 外面太危险了 还是在家学习比较安全可持续 过年期间 我又复习了几遍依赖注入框架Dagger 诶 什么是依赖注入 说白了就是降低跟类对象之间的耦合 当需要修改类对象的时候 能不修改被依赖的实例 其实我们平常就用到了很多的
  • Sping为什么使用依赖注入而不使用实例化对象的方式?

    首先说明一下概念 依赖注入 Dependency of Injection 和控制反转 Inversion of Control 简称 ioc 是一个概念 具体含义 当某个角色 Java实例class A 调用者 需要另一个角色 另一个Ja
  • Spring控制反转和依赖注入的好处

    要了解控制反转 Inversion of Control 我觉得有必要先了解软件设计的一个重要思想 依赖倒置原则 Dependency Inversion Principle 什么是依赖倒置原则 假设我们设计一辆汽车 先设计轮子 然后根据轮
  • Flutter依赖注入

    依赖注入 依赖注入 Dependency Injection 简称DI 是一种软件设计模式 它的主要目的是将对象之间的依赖关系解耦 使得代码更加可维护 可测试 可扩展 使得代码更易于维护和测试 在Flutter中 DI可以帮助我们管理应用程
  • 30天精通Nodejs--第二十一天:express-依赖注入

    目录 引言 Express中的模块化实践 依赖注入 什么是依赖注入 Express中实现依赖注入 结语 引言 在构建大型且复杂的Node js Express应用程序时 良好的架构设计至关重要 模块化编程可以帮助我们把代码分解为可复用 易维

随机推荐

  • 请求报警:Referrer Policy: strict-origin-when-cross-origin或引用站点策略: no-referrer-when-downgrade

    提交表单发送ajax请求时 xff0c chrome请求返回Referrer Policy strict origin when cross origin错误 xff0c 360浏览器返回 引用站点策略 no referrer when d
  • docker安装ES及kibana

    docker安装elasticsearch xff1a docker pull elasticsearch 7 4 2 docker pull kibana 7 4 2 xff08 可视化界面 xff0c 要与es版本保持一致 xff09
  • redis分布式锁到redisson的转变

    首先导入redis依赖 xff1a lt dependency gt lt groupId gt org springframework boot lt groupId gt lt artifactId gt spring boot sta
  • 实现Mysql事务嵌套(部分回滚)

    测试数据库表结构 xff1a CREATE TABLE 96 my user 96 96 id 96 int 11 NOT NULL AUTO INCREMENT 96 name 96 varchar 50 DEFAULT NULL 96
  • iframe框架中a标签的target失效问题,导致链接跳转到新窗口

    最近遇到一个问题很奇怪 xff0c 我用iframe搭建的页面 xff0c 页面左侧设置了菜单栏 xff0c 右侧是菜单对应的链 接内容 a标签加target实现 xff0c 但是最近发现有一个菜单链接一访问会导致所有的菜单target失效
  • http和https网页切换导致cookie失效问题

    网站先后从https和http方式登陆网站 xff0c 会导致http中cookie无法生效 xff0c 即https覆盖和http但作用域只在https中 xff0c 在http中浏览器debug中查看不到相关cookie 之前遇到这个问
  • 程序员要多跳巢才能涨工资

    不要一辈子呆死在一家公司 都是打工高薪才是王道 fs xff1a 这 篇文章的本意 xff0c 是告诉大家如何识别公司 而不是鼓励大家无脑跳槽 只有当你在一个公司略有所成的时候 xff0c 你才能有所积累 跳槽更多时候 xff0c 应该看到
  • Ajax反正现在我没怎么看懂

    AJAX即 A synchronous J avascript A nd X ML xff08 异步JavaScript和XML xff09 xff0c 是指一种创建交互式 网页应用的网页开发技术 AJAX 61 异步 JavaScript
  • ViewBinding封装基类(BaseActivity,BaseFragment)

    混淆规则 keep class 包名 databinding 使用反射 BaseActivity public class BaseActivity lt T extends ViewBinding gt extends AppCompat
  • acc--›Android无障碍开发手势操作

    文章目录 前言dispatchGesture 96 api gt 61 24 96 GestureDescriptionGestureResultCallback执行手势 DslAccessibilityGestureclick 点击dou
  • C语言基础学习——基本数据类型(float型)

    1 float型 xff08 浮点型 xff09 浮点型是用来表示小数的 xff0c 默认至少有6位有效小数 xff1b 有float xff08 单精度 xff09 xff0c double xff08 双精度 xff09 xff0c l
  • Mybatis整合Spring和SpringMVC配置文件详解

    配置文件 pom xml xff08 配置我们需要的jar包 xff09 web xml xff08 启动spring容器监听器并加载spring的xml文件 xff0c 加载springmvc前端控制器 xff09 springmvc的配
  • 高并发场景下如何保证数据库和缓存的数据一致性

    高并发场景下如何保证数据库和缓存的数据一致性 分析经典做法 分析 只要用缓存 xff0c 就可能会涉及到缓存与数据库双存储双写 xff0c 你只要是双写 xff0c 就一定会有数据一致性的问题 xff0c 那么你如何解决一致性问题 xff1
  • XmlDocument类详解

    xfeff xfeff XmlDocument类 FreeEIM XmlDocument类是 NET框架的DOC解析器 XmlDocument将XML视为树状结构 xff0c 它装载XML文档 xff0c 并在内存中构建该文档的树状结构 下
  • 1024,如果全世界程序员都消失了,会怎样?

    这两天 xff0c 有一个话题引起了程序员的广泛讨论 xff1a 年薪80W程序员相亲被鄙视 某知名互联网社区 xff0c 一网友发帖 xff0c 自己年薪80W去相亲 xff0c 竟然被鄙视不如在二本学校教书的大学老师 估计令他没想到的是
  • AI---是什么?可以做什么?

    1 AI的项目简单介绍 图像识别 描述 xff1a 给定图片 xff0c 识别图片中有什么 xff1f 算法 xff1a KNN CNN 情感分析 描述 xff1a 判断文本包含的情感是正面 负面还是中性 关键 xff1a 文本如何表示成向
  • linux 下 gb18030 转码成 utf8

    iconv f gb18030 t utf8 1 txt o 2 txt
  • ocelot+IdentityServer认证

    IdentityServer4 IdentityServer4是用于ASP NET Core的OpenID Connect和OAuth 2 0框架 具体大家可以自己搜索 xff0c 网上很多 我不想写的就推荐别人的 IdentityServ
  • 图中连通块的个数:并查集

    图的连通性问题 在地图上有若干城镇 xff08 点 xff09 xff0c 已知所有有道路直接相连的城镇对 要解决整幅图的连通性问题 比如 xff0c 随意给你两个点 xff0c 让你判断它们是否连通 xff1b 或者问你整幅图一共有几个连
  • 依赖注入

    举个例子 xff0c 组件A中有类ClassA xff0c 组件B中有接口IB和其对应的实现类B1和B2 那么 xff0c 现在ClassA需要利用IB接口来做一些事情 xff0c 例如 xff1a public class ClassA