zoukankan      html  css  js  c++  java
  • Spring中IOC与DI的的区别

    依赖注入的前提:

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

    DI 介绍 

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

    IOC与DI的的区别: 

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

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

    举一个栗子:

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

    public interface IShopping {
        void drive();
        String Money();    
    }

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

    复制代码
    public class RichMan implements IShopping{
        @Override
        public void drive() {
            System.out.println("Drive By Benz");        
        }
    
        @Override
        public String Money() {
            System.out.println("lot`s of money");
            return "10000";
        }
    }
    复制代码
    复制代码
    public class PoorGuy implements IShopping{
        @Override
        public void drive() {
            System.out.println("take a walk!");
        }
    
        @Override
        public String Money() {
            System.out.println("nothing");
            return "1";
        }
    }
    复制代码

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

    复制代码
    public class Play {
        
        private IShopping shoppingSomething;
        
      //使用构造方法,将实现传入 public Play(IShopping shoppingSomething){ this.shoppingSomething = shoppingSomething; } public void withgirlFriend(){ shoppingSomething.drive(); shoppingSomething.Money(); }
    }
    复制代码

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

    public class Containner {
        
        public Play getShopping(){
            return new Play(new RichMan());
        }
    }

    测试一下:

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

    结果是:

    Drive By Benz
    lot`s of money

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

  • 相关阅读:
    常用CSS代码大全(工作必备)
    微信开发新增拖动组件--movableview介绍
    CSS---解决文本溢出,换行
    SublimeText 自带格式化代码功能
    后台界面也可以很酷!31个高大上的后台管理系统模版
    漏洞:阿里云盾phpMyAdmin <=4.8.1 后台checkPageValidity函数缺陷可导致GETSHELL
    Linux系统定时备份网站文件到七牛云存储脚本
    php重定向的三种方法分享
    CentOS Gnome字体不清晰
    centos 6.5 安装mplayer
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/9629683.html
Copyright © 2011-2022 走看看