下面谈谈Spring是如何实现反转模式IoC或依赖注入模式DI: 平时,我们需要生成一个对象,使用new语法,如一个类为A

public class A {public void m1() {System.out.println(this.getClass().getName()+":Hello");}
}
复制代码

如果我们在 B中调用A,那么如下代码:

package com.os.test;
//B类中使用A类
public class B {//B类中调用A类//每一次执行invoke方式,都生成一个A的对象,如果//A对象代码比较长,挺费时费力public void invoke() {A a = new A();a.m1();}
}
复制代码

每次执行invoke方法时,都要生成一个A对象,如果A对象代码较长,这是费时的事情。于是有如下写法:

package com.os.test;
//C类中使用A类
public class C {//A类变成了C类中的属性,但是我不想立即对A进行实例化操作//我们想通过外界传入A对象,涉及到了涉及模式private A a = new A();//不准直接进行初始化操作public void invoke() {a.m1();}
}
复制代码

将A对象变成C的类属性。 如果我们不想在C中实现A的实例,也就是不想立即new A(),而是想通过外界传入, 注意,如果你想知道为什么,这里涉及到设计模式以及解耦等因素,进一步感兴趣者可学习 23 种设计模式。

如果想让A的实例从外界传入,有两种写法:

  • 构造方法
package com.os.test;
//D类中使用A类
public class D {private A a ;//我需要给a进行初始化操作public D(A a) {//构造方法进行赋值==注入this.a = a;}public void invoke() {a.m1();}
}
复制代码
  • setter方式
package com.os.test;
//F类中使用A类
public class F {private A a ;//我需要给a进行初始化操作public void invoke() {a.m1();}public void setA(A a) {//注入this.a = a;}
}
复制代码

上述两种写法在编程中是经常发生的,D(或F)作为调用者,A是被调用者,A的实例化不在调用者D(或F)内部中完成,而是通过构造函数或setXXX方法赋值进来,这种方式我们称为依赖性注入(DI 或者 IoC 模式),D(或F) 和A 的依赖联系是通过构造函数或setXXX 方法赋值进来,这样, 最大程度解耦了调用者D(或F)和被调用者A之间的耦合联系。

转载于:https://juejin.im/post/5cb7f66af265da03914d5ac4

001.Spring | 依赖注入原理分析相关推荐

  1. Java程序员进阶——Spring依赖注入原理分析

    Spring依赖注入原理分析 下面谈谈Spring是如何实现反转模式IOC或依赖注入模式DI: 平时,我们需要生成一个对象,使用new语法,如一个类为A public class A{public v ...

  2. spring依赖注入原理详解(转载)

    spring依赖注入原理详解----转载 所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中.当spring容器启动后,spring容器初始化,创建并管理bean对象,以及销毁它.所 ...

  3. spring依赖注入原理(转载)

    关于spring依赖注入原理的文章在网络上已经有很多,我要写的这篇文章原文出自http://taeky.iteye.com/blog/563450,只所以再一次写下来只是为了一为自己收藏,方便以后的复 ...

  4. spring依赖注入原理详解

    所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中.当spring容器启动后,spring容器初始化,创建并管理bean对象,以及销毁它.所以我们只需从容器直接获取Bean对象就行, ...

  5. (转)编码剖析Spring依赖注入的原理

    http://blog.csdn.net/yerenyuan_pku/article/details/52834561 Spring的依赖注入 前面我们就已经讲过所谓依赖注入就是指:在运行期,由外部容 ...

  6. Spring依赖注入和循环依赖问题分析

    Spring源码揭秘之依赖注入和循环依赖问题分析 前言 依赖注入的入口方法 依赖注入流程分析 AbstractBeanFactory#getBean AbstractBeanFactory#doGet ...

  7. 依赖注入原理 php,PHP依赖注入原理与用法分析

    本文实例讲述了PHP依赖注入原理与用法.分享给大家供大家参考,具体如下: 引言 依然是来自到喜啦的一道面试题,你知道什么是依赖注入吗? 依赖注入(DI)的概念虽然听起来很深奥,但是如果你用过一些新兴的 ...

  8. Spring Boot(四):Spring Boot启动原理分析

    文章目录 Spring Boot启动原理分析 一.依赖导入原理 二.Spring Boot包扫描原理 三.Spring Boot自动配置原理 Spring Boot启动原理分析 一.依赖导入原理 父项 ...

  9. java接口注入对象的意义_Java Web系列:Spring依赖注入基础

    一.Spring简介 1.Spring简化Java开发 Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构.基础设施和常用功能性组件,而是 ...

  10. diy实现spring依赖注入

    [README] 本文diy代码实现了 spring 依赖注入,一定程度上揭示了依赖注入原理: [1]控制反转-Inversion of Control 是一种编码思想,简而言之就是 应用程序A可以使 ...

最新文章

  1. python输入星期几_Python练习实例31 | 输入首字母,判断是星期几
  2. MobileNet教程(2):用TensorFlow搭建安卓手机上的图像分类App
  3. 记一次安装docker的坑
  4. 应用开发之WinForm开发
  5. Struts DispatchAction
  6. 1到100猜数字游戏规则c语言,[C语言课程设计猜数字游戏1.doc
  7. 爬取异步请求(XHR/JS)数据方法
  8. redis重启命令_请收下这份redis持久化详解
  9. 每个产品经理都应该知道的机器学习术语
  10. 手机子王掩码和网关查找_C程序使用位掩码查找奇数或偶数
  11. java与python数据结构对比
  12. MySQL用命令行运行sql文件
  13. 关于发那科机器人弧焊指令故障处理
  14. android 通用驱动程序下载,安卓手机通用驱动官方下载-安卓手机通用驱动(Universal Adb Driver)下载v2017 官方最新版-当易网...
  15. 解决Mac系统读写NTFS格式移动硬盘
  16. static taint IoT vul location
  17. [Premiere Pro]新建尺寸设置(1080*1920手机屏幕尺寸)
  18. 一个微信小程序开发示例
  19. android 多语言的实现
  20. 华北电力大学计算机学院复试,2014年华北电力大学(北京)控制与计算机学院考研复试办法...

热门文章

  1. vscode settings.json配置
  2. django数据库操作
  3. [19/03/12-星期二] 数组_遍历(for-each)复制java.util.Arrays类
  4. CF1062D Fun with Integers
  5. 基础数据类型的坑和集合及深浅copy
  6. java并发线程池---了解ThreadPoolExecutor就够了
  7. RequestHeaders添加自定义参数
  8. TCP连接、Http连接与Socket连接
  9. mysql-备份和还原(普通还原和binlog还原)
  10. 如何时刻保持在目标的正确轨道上