`

IOC容器的实现

阅读更多
   面试的时候,偶尔会遇到让谈谈IOC容器的问题,在这里做一个简要的整理。这个问题从毕业到现在时不时的出现,答案也一次一次的被刷新。因为个人理解有限,仅从三个阶段去阐述,同时欢迎各位拍砖。
  


    阶段一:概念的阐述
   阶段二:从实现的角度去阐述
   阶段三:举一反三的使用场景



 
     阶段一:概念的阐述   
   
     IOC、DI是什么?IOC即控制反转,DI即依赖注入,表面上两个是不沾边的概念,其实是解决“对象与对象之间强耦合问题”的方式和方法。那么先来说一下到底IOC是一种什么样的方式,举个不恰当的栗子,A想去买一套二手房,B刚好手里有一套二手房,但是A想知道B有二手房,必须看小广告,然后打电话问(查找对象),一开始可能先给C打,可是C只想把他的二手房租出去,并不想卖,终于有一天找到了B,然后A说先把B这套房订下来(强依赖),本来以为皆大欢喜了。可是准备签合同的时候B又找到另外一个出高价的人,B告诉A说对不起不卖了,A只能哭了。这个时候扮演IOC的角色出现了,那就是房产中介D,当A想买房的时候,告诉D我要买个几室几厅的二手房;B想卖房,然后也找D登记了。D手里有很多房源和客源(IOC 容器)直接告诉A、B成交,这问题就解决了。我们回顾一下这种方式,就会发现本来由A正向控制B,这样B稍微一变就杯具了 ,当D出现后,由D来反向控制A,而 D来拿到B给A的过程就是DI。理解了这一点,我们换成官方的话就是:“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”,”控制反转“把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象的思想,解决了对象与对象之间强耦合的问题



    阶段二:从实现的角度去阐述
    首先,在没有IOC的情况下,我们是这样强依赖的
   解决容器对组件的“侵入式”管理的两种方案--主动查找和控制反转
    接着,简单通过反射加配置的方式
    初步实现
    最后,我们使用跟spring相似的实现方式(只实现了spring三种注入方式中的set注入)
    最终版
  

     阶段三:举一反三的使用场景
     除了spring 容器对bean的管理之外,我能想到的IOC场景
     1.对消息的处理封装成消息中心,消息的注册和消费都在这个消费中心去做,由消息中心通过接口调用方式,注入到消费方,这样可以达到可靠的消息处理,包括失败重试
    
     2.分布式rpc服务的注册中心

    
引用
http://blog.csdn.net/jiuqiyuliang/article/details/44114731
分享到:
评论
1 楼 carlosfu 2015-11-22  
    

相关推荐

    Spring IOC容器实现分析.pdf 下载

    《Spring IOC容器实现分析》 在Java开发领域,Spring框架无疑是使用最为广泛的轻量级框架之一,其中的核心组件就是IOC(Inversion of Control)容器。本文将深入剖析Spring的IOC容器,理解其工作原理和重要功能,以...

    一个简单的IOC容器实现

    本文将深入探讨一个简单的IOC容器实现,帮助我们理解DI的基本原理。 首先,理解IOC的概念至关重要。在传统的编程模式中,对象通常自行创建依赖的对象,这导致了代码之间的紧密耦合。而在IOC模式下,容器负责管理...

    模拟Spring的IoC容器实现注解自动装配

    现在,我们将深入探讨如何模拟Spring的IoC容器实现注解自动装配。 首先,我们需要理解IoC容器的基本工作原理。IoC容器是通过扫描应用程序上下文来发现所有需要管理的bean,并根据bean定义来创建和初始化这些bean。...

    Spring IoC容器实现的结构分析

    本文将从实现的角度,通过对外部接口、内部实现、组成部分和执行过程四个角度深入剖析Spring IoC容器的结构。 首先,Spring IoC容器的外部接口主要包括`ApplicationContext`和`BeanFactory`。`BeanFactory`是IoC...

    IOC容器简单实现

    下面是一个简化的IOC容器实现: ```java class SimpleIOCContainer { private Map, Class<?>> beanDefinitions; private Map, Object> instantiatedBeans; public void registerBean(String beanId, Class<?> ...

    Spring IOC容器实现分析

    ### Spring IOC容器实现分析 #### 一、Spring IOC容器概览 Spring框架作为一款轻量级的开源框架,其核心之一便是IOC(Inversion of Control)容器。该容器的主要功能在于管理和控制对象间的依赖关系,使得开发人员...

    java IOC容器实现.jpg

    java IOC容器实现.jpg

    IoC 容器和Dependency Injection 模式

    在 Java 社区中,有一些流行的 IoC 容器实现了依赖注入,比如 Spring Framework 和 PicoContainer。这些框架提供了一系列工具和 API 来支持 IoC 和 DI,使开发者能够更加高效地组织和管理项目中的组件。 - **Spring...

    Spring实现原理及IoC容器的优点

    总的来说,Spring框架通过其IoC容器实现了对象的管理和依赖注入,带来了诸多好处,同时Eclipse作为强大的开发工具,为创建和管理Spring Web应用提供了便利。了解和掌握这些知识,对于提升Java开发效率和代码质量具有...

    Spring的IoC容器初始化源码解析

    `BeanFactory`是最基本的IoC容器实现,它主要负责创建和管理bean的生命周期。BeanFactory提供了一系列基础方法,例如获取bean、判断bean的存在性、判断bean是否为单例等。它是所有Spring容器的基类,为其他容器提供...

    实现自己的Ioc容器

    标题中的"Ioc容器"指的是Inversion of ...由于没有具体的文件内容,这里只能提供一个基于IoC容器实现的一般概述。如果你能访问到那个博客文章,它应该会提供更具体和实用的信息,帮助你理解和实现自己的IoC容器。

    IoC容器的设计(利用反射、注解和工厂模式实现)

    实验要求 1. 利用注解、反射和工厂模式设计一个简单的IoC容器 2. 该IoC容器包含3个...然后我们需要自己实现一个IoC容器类,处理自定义的注解的基本逻辑; 接下来在test类中实例化IoC容器,并从中取得bean,调用其方法

    基于IOC容器实现管理mybatis过程解析

    "基于IOC容器实现管理mybatis过程解析" IOC容器是Inversion of Control的缩写,指的是控制反转容器。在软件设计中,控制反转是一种设计原则,它将对象的控制权从对象本身转移到外部容器中,从而实现了对象之间的松...

    自己实现IOC容器

    在Java领域,Spring框架的IOC容器是最为广泛应用的实现之一。当我们自己动手实现IOC容器时,可以更深入地理解其内部的工作机制。 ### 1. IOC基本原理 **控制反转**的核心思想是将对象的创建和管理权交给容器,而...

    spring ioc和aop原理流程图(详细)

    在Spring框架中,这个外部容器就是**IOC容器**。以下是Spring IOC容器的主要知识点: 1. **Bean的定义**:在Spring中,业务对象被称为Bean。Bean定义包含了创建和管理Bean的所有信息,如类名、属性值、依赖关系等,...

    简单IOC容器demo

    1. 源代码文件(.java):这些文件可能包含了实现IOC容器的类,如一个用于扫描注解并处理依赖注入的主容器类,以及带有注解的被注入对象类。 2. 注解(Annotations):例如`@Autowired`或自定义注解,用于标记需要...

    自己实现的ioc容器

    现在我们来详细探讨一下如何从零开始,用纯Java实现一个简单的IoC容器。 首先,我们要理解IoC的概念。IoC是指将控制权从应用程序的代码中转移出来,交由一个外部容器进行管理。在传统的编程模式中,对象会自行创建...

    JavaScript的IoC容器wire.js.zip

    wire.js 是一个轻量级的 JavaScript IoC 容器实现。 标签:wirejs

    IOC容器 mini-container

    在Java世界里,Spring框架是最著名的IOC容器实现之一,但除此之外,还有很多小型、轻量级的IOC容器,比如本案例中的"mini-container"。 "mini-container"是一个开源项目,它的目标是提供一个功能简洁但实用的IOC...

    easy-ioc:一个简单的IOC容器实现

    《深入解析:easy-ioc——一个简单的IOC容器实现》 在软件开发中,控制反转(Inversion of Control,简称IOC)是一种设计模式,它将对象的创建和组装过程从代码中解耦,使得系统更加灵活、可维护。而依赖注入...

Global site tag (gtag.js) - Google Analytics