依赖注入的前提:

有IOC的环境,也就是将必须对象的创建权交给了Spring.

DI 介绍

Dependency Injection 依赖注入.需要有IOC 的环境,Spring 创建这个类的过程中,Spring 将类的依赖的属性设置进去.

IOC与DI的的区别:

IOC:  控制反转,将类的对象的创建交给Spring类管理创建. 
DI:    依赖注入,将类里面的属性在创建类的过程中给属性赋值. 
DI和IOC的关系: DI不能单独存在,DI需要在IOC的基础上来完成.

这样做得好处:做到了单一职责,并且提高了复用性,解耦了之后,任你如何实现,使用接口的引用调用的方法,永远不需要改变

举一个栗子:

写个接口,说咱们购物去~

  1. public interface IShopping {
  2. void drive();
  3. String Money();
  4. }

在实现它两下:有钱人购物,没钱人购物     - -!这栗子举的

  1. public class RichMan implements IShopping{
  2. @Override
  3. public void drive() {
  4. System.out.println("Drive By Benz");
  5. }
  6.  
  7. @Override
  8. public String Money() {
  9. System.out.println("lot`s of money");
  10. return "10000";
  11. }
  12. }
  1. public class PoorGuy implements IShopping{
  2. @Override
  3. public void drive() {
  4. System.out.println("take a walk!");
  5. }
  6.  
  7. @Override
  8. public String Money() {
  9. System.out.println("nothing");
  10. return "1";
  11. }
  12. }

然后我们出去玩,顺便shopping一下吧~

  1. public class Play {
  2.  
  3. private IShopping shoppingSomething;

  4.   //使用构造方法,将实现传入
  5. public Play(IShopping shoppingSomething){
  6.  
  7. this.shoppingSomething = shoppingSomething;
  8. }
  9.  
  10. public void withgirlFriend(){
  11. shoppingSomething.drive();
  12. shoppingSomething.Money();
  13. }
  14. }

将想用的实现方式,用容器注入进来,这里就模拟下下怎么注入:

  1. public class Containner {
  2.  
  3. public Play getShopping(){
  4. return new Play(new RichMan());
  5. }
  6. }

测试一下:

  1. public static void main(String[] args) {
  2. Containner containner = new Containner();
  3. Play play = containner.getShopping();
  4. play.withgirlFriend();
  5. }

结果是:

Drive By Benz
lot`s of money

如果再依赖注入的配置时,配置为穷人的实现,那我们的代码都不用变,结果就会改变~

Spring中IOC与DI的的区别的更多相关文章

  1. 对Spring中IOC和DI的理解

    前几篇讲了Spring中IOC和DI的用法,本篇应该放到三篇之前,但一直没有想到好的讲解方式,后参考https://blog.csdn.net/luoyepiaoxue2014/article/det ...

  2. JavaWeb_(Spring框架)Spring中IoC与DI概念入门

    Spring是于2003 年兴起的一个轻量级的Java 开源框架,它由Rod Johnson创建.传统J2EE应用的开发效率低,Spring作为开源的中间件,提供J2EE应用的各层的解决方案,Spri ...

  3. Spring中IOC的理解

    Spring中IOC的理解 1.什么是IOC? (1)控制反转.把对象创建和对象间的调用过程交给Spring进行管理. (2)使用IOC的目的:为了耦合度降低. 2.IOC底层原理? (1)xml解析 ...

  4. 面试突击73:IoC 和 DI 有什么区别?

    IoC 和 DI 都是 Spring 框架中的重要概念,就像玫瑰花与爱情一样,IoC 和 DI 通常情况下也是成对出现的.那 IoC 和 DI 什么关系和区别呢?接下来,我们一起来看. 1.IoC 介 ...

  5. spring的IOC,DI及案例详解

    一:spring的基本特征 Spring是一个非常活跃的开源框架:它是一个基于Core来架构多层JavaEE系统的框架,它的主要目的是简化企业开发.Spring以一种非侵入式的方式来管理你的代码,Sp ...

  6. 总结一下 Spring的IOC、DI

    国庆节刚过,应一些朋友的提问,总结一下Spring中IOC也即DI的通俗理解. 网友wm5920解释: IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件 ...

  7. Spring中IOC和AOP的详细解释(转)

    原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...

  8. spring核心技术IOC,DI

    在介绍Spring中IOC之前,先说说Spring的优势有哪些.首先1.方便解耦,简化开发:就是说将对象间的依赖关系交给Spring进行控制,避免了编码造成的过度耦合.2.AOP编程的支持:方便进行切 ...

  9. Spring中IoC的入门实例

    Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如 ...

随机推荐

  1. 重启oracle数据库的操作方法

    在实际的应用中,有时候工作数据库需要重新启动.本文介绍了一个特别实用的操作步骤,希望对大家有所帮助. 1. 停应用层的各种程序 2. 停Oralce的监听进程 $ lsnrctl stop 3. 在独 ...

  2. pyinstall 把你的程序变成windows的可执行程序。py exe UPX

    我们先看一下这个官方文档 http://pythonhosted.org/PyInstaller/ 其实常用的也就是两句 pyinstall ***.py pyinstall -F ***.py 一: ...

  3. dnspod 动态域名的使用。openwrt使用dnspod动态域名解析。

    这里主要说的是linux shell下的使用. 先看接口说明: 接口地址: https://dnsapi.cn/Record.Ddns HTTP请求方式: POST 请求参数: 公共参数 domain ...

  4. php通过$_SERVER['HTTP_USER_AGENT']获取浏览器useAgent

    php通过$_SERVER['HTTP_USER_AGENT']获取浏览器useAgent

  5. 2.2 C++类的成员变量和成员函数

    参考:http://www.weixueyuan.net/view/6334.html 总结: 类成员的声明和定义: 类成员函数的定义分类内定义(内联)和类外定义(可用 inline 关键字 强制转换 ...

  6. 2019.1.3 WLAN 802.11 a/b/g PHY Specification and EDVT Measurement II - Transmit Spectrum Mask & Current Consumption

    Transmit Spectrum Mask Specification – 802.11b SpecificationFor 802.11b 18.4.7.3The transmitted spec ...

  7. Linux:at命令详解

    at命令 at命令为单一工作调度命令.at命令非常简单,但是在指定时间上却非常强大 语法 at [选项] time at > 执行的命令 ctrl+d 选项 -m :当指定的任务被完成之后,将给 ...

  8. jsp参考手册

    DHTML手册javascript programmer's reference

  9. JavaScript权威指南——跳转语句

    前言:JavaScript中有一类语句叫做跳转语句.从名称就可以看出,它使得JavaScript的执行可以从一个位置跳转到另一个位置. return语句让解释器跳出循环体的执行,并提供本次调用的返回值 ...

  10. linux比较两个文件的差异

    1. vimdiff $ vimdiff in.txt out.txt 垂直打开:  vimdiff   point.c     point-a.c 水平打开:   vimdiff -o  point ...