学习地址:腾讯课堂   https://ke.qq.com/course/28986?_bid=167&_wv=3&from=iosapp

1.什么是IOC容器
  定义:
    1.是一个可以把面向细节编程方式,转变为面向抽象编程方式的第三方容器(工厂模式差不多)

    2.可以用来自动化创建对象的容器(利用DI依赖注入和配置文件的手段来实现)

  遵循依赖倒置原则:
    高层不直接依赖底层的细节,而是通过抽象来依赖,也就是所谓的把面向细节编程变为面向抽象编程

  IOC控制反转:
    把高层对底层的依赖去掉,对象的控制权转移到第三方容器,让程序更具有扩展性

  DI依赖注入:
    实现IOC的一种手段,构造对象时,把依赖的对象自动创建并传入进去

  DI依赖注入的先后顺序:
    构造函数注入-->属性注入-->方法注入

2.为什么要用IOC容器
  面向细节编程:
    当我们面向细节编程的时候,如果细节变化了(扩展了),那么高层也需要改变,程序中往往底层的细节是容易改变的,这样会导致程序架构不稳定(往往我们的程序是不止一层的)

  面向抽象编程:
    当我们面向抽象编程的时候,如果细节变化了(扩展了),高层时不需要改变,这样阻止了程序升级时的水波效应,使程序架构更加稳定

  例如(随便举例子):

    手机类如下:

public class Iphone
{
public void Play()
{
Console.WriteLine("我在玩iphone");
}
} public class VIVO
{
public void Play()
{
Console.WriteLine("我在玩vivo");
}
}

    学生类如下:

public class Student
{
public void Play(IMobile iphone)
{
iphone.Play();
} } 

    现在我们创建一个学生,并让学生玩iphone(面向细节)

//我们通过买一款iphone手机玩
public Unity_Test1()
{
Student stu = new Student();
Iphone iphone = new Iphone();
stu.Play(iphone);
}

    到后面这个学生想玩vivo手机了,不想玩iphone,那么我们需要改低层的 Play(Iphone iphone)方法,应为它接受的是一个Iphone类型的参数,同时我们还需要改Unity_Test1类中的代码

    我们可以使用多态来解决此问题

      先定义一个接口,并让上面2款手机继承此手机接口,并把

public interface IMobile
{
void Play();
}

      代码如下(多态:里氏替换原则):

Student stu = new Student();
IMobile iphone = new Iphone();
stu.Play(iphone);

      想玩vivo手机了,不想玩iphone,这下我们只需要更改  IMobile iphone = new Iphone();   此句话即可

public Unity_Test1()
{
Student stu = new Student();
IMobile iphone = new VIVO();
stu.Play(iphone);
}

      注意:这里还是是依赖了细节(IMobile iphone = new VIVO();),并不满足依赖倒置原则(面向抽象,而不是面向细节)

3.如何实现依赖倒置原则

  问题:

    不依赖细节,那么我们如何创建对象呢?

  

  解决:

    把创建对象的事情交给第三方去实现

  方式如下:

    1)使用工厂模式

    2)使用IOC容器

1.初步了解IOC容器的更多相关文章

  1. [Spring学习笔记 1 ] Spring 简介,初步知识--Ioc容器详解 基本原理。

    一.Spring Ioc容器详解(1) 20131105 1.一切都是Bean Bean可是一个字符串或者是数字,一般是一些业务组件. 粒度一般比较粗. 2.Bean的名称 xml配置文件中,id属性 ...

  2. spring源码学习之路---深度分析IOC容器初始化过程(四)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近由于工作和生活,学习耽搁 ...

  3. Spring IOC容器分析(3) -- DefaultListableBeanFactory

    上一节介绍了封装bean对象的BeanDefinition接口.从前面小结对BeanFactory的介绍中,我们知道bean对象是存储在map中,通过调用getBean方法可以得到bean对象.在接口 ...

  4. ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)

    前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 目录 ...

  5. ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)

    前言 本文主要是详解一下在ASP.NET Core中,自带的IOC容器相关的使用方式和注入类型的生命周期. 这里就不详细的赘述IOC是什么 以及DI是什么了.. emm..不懂的可以自行百度. 目录 ...

  6. 【Spring源码解析】—— 结合SpringMVC过程理解IOC容器初始化

    关于IOC容器的初始化,结合之前SpringMVC的demo,对其过程进行一个相对详细的梳理,主要分为几个部分: 一.IOC的初始化过程,结合代码和debug过程重点说明 1. 为什么要debug? ...

  7. 初步理解IOC和DI和AOP模式

    初步理解IOC和DI和AOP模式 控制反转(IOC) 控制反转(IOC,Inversion of Control)是一种转主动为被动关系的一种编程模式,有点类似于工厂模式,举个栗子, 下面这个这不是I ...

  8. 转 Spring源码剖析——核心IOC容器原理

    Spring源码剖析——核心IOC容器原理 2016年08月05日 15:06:16 阅读数:8312 标签: spring源码ioc编程bean 更多 个人分类: Java https://blog ...

  9. Spring IoC容器与应用上下文的设计与实现

    一.前言 写这篇博文的主要目的如下: 通过相关类和接口分析IoC容器到底长什么样. 阐述笔者对Spring上下文和容器的理解. 介绍重要的类辅助理解SpringBoot的启动流程. 二.Spring ...

随机推荐

  1. python在mapreduce运行Wordcount程序

    首先脚本文件: mapper.py: #!/usr/bin/env python import sys for line in sys.stdin: line = line.strip() words ...

  2. 【leetcode】1020. Number of Enclaves

    题目如下: Given a 2D array A, each cell is 0 (representing sea) or 1 (representing land) A move consists ...

  3. struts2---访问WEB

    一:在Action中,可以通过以下方式访问WEB的HttpSession,HttpServletRequest,HttpServletResponse等资源 与Servlet API解耦的访问方式 通 ...

  4. basic play

    [root@wen ~]# w 19:01:27 up 1 day, 7:06, 3 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN ...

  5. 安卓Activity布局简述

    Activity布局简述 基于xml的布局 Main.xml(调用工程res/layout/main.xml定义的界面元素完成布局显示) <?xml version="1.0" ...

  6. IIS的站点配置存储在applicationHost.config

    C:\Windows\System32\inetsrv\Config\applicationHost.config

  7. java String 类特点

    String的设计是一个典型的单一模式 String str1="AAAA":String str2="AAAA": 这生成两个对象吗?不是.在内存中,这是同一 ...

  8. SAS中的Order By - Proc Sort

    SAS中的Order By - Proc Sort 1.排序proc sort proc sort在按数据集中某一个变量或几个变量的升序或降序将记录重新排列,并把结果保存在输出数据集中,如果不另外指定 ...

  9. python让人头大的装饰器...decorator带参不带参用法和原理.,..

    0. 概念什么叫装饰器,其实也可以叫做包装器.即对于一个既有的函数func(args),在调用它之前和之后,我们希望都做一些事情,把这个函数包装起来. python中的装饰器分为两类:函数装饰器和类装 ...

  10. PAT 2019-3 7-1 Sexy Primes

    Description: Sexy primes are pairs of primes of the form (p, p+6), so-named since "sex" is ...