`
pengwei841221
  • 浏览: 72204 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

IoC容器的实现

阅读更多

IoC容器和依赖反转模式

许多非凡的应用(比HelloWorld.java更加优美、复杂)都是有两个或多个类通过彼此的合作来实现业务逻辑,这使得每个对象都需要与其合作的对象(也即是它所依赖的对象)的引用。

如果这个获取过程要靠自身实现,那么如你所见,这将导致大妈高度耦合并难以测试。

 

关于如何反转对依赖的控制,把控制权从具体的业务对象手中转交到平台或框架中,是解决面向对象系统设计复杂性和提高面向对象系统可测试性的一个有效解决方案。


应用控制反转后,当对象被创建时,有一个调控系统内的所有对象的外界实体将其所依赖的对象的引用传递给它。依赖被注入到对象中。 所以,控制反转是关于一个对象如何获取它所依赖的对象的引用的。

 

对象之间的相互依赖关系由IoC容器进行管理,并有容器完成对象的注入。

把应用从复杂的对象依赖关系 管理中解放出来。

 

在面向对象编程中常常需要执行的诸如新建对象、给对象引用赋值等操作交由容器统一完成。

这些散落在不同代码中的功能相同的部分就集中成为容器的一部分。

 

 

Spring的IoC容器系列

BeanFactory和ApplicationContext都可以看成容器的具体实现形式。

IoC容器实际上代表着一系列功能各异的容器产品,只是容器功能有大有小、有各自的特点。

 

BeanFactory体现了Spring为用户使用IoC容器所设定的最基本功能规范。

BeanFactory作为一个最基本的接口类出现在Spring的IoC容器体系中。

 

Spring通过定义BeanDefinition来管理Spring应用中各种对象以及它们之间的相互依赖关系。

BeanDefinition抽象了我们对Bean的定义,是让容器起作用的主要数据类型。

 

BeanFactory对IoC容器的功能定义

提供了IoC容器所应该遵守的最基本的服务契约;同时,这也是我们使用IoC容器所应遵守的最底层的和最基本的编程规范。

1、用户使用容器的时候,可以使用转义符“&”来得到FactoryBean本身,用来区分通过容器获得FactoryBean产生的对象和获取FactoryBean本身。

 /**
   * Used to dereference a instance and distinguish it from
   * beans created by the FactoryBean.
   */
String FACTORY_BEAN_PREFIX = "&";

 

IoC容器XmlBeanFactory的工作原理

继承了DefaultListableBeanFactory(默认的完整功能的IoC容器来使用),是一个与XML相关的BeanFactory,也就是说它可以读取以XML文件方式定义的BeanDefinition的一个IoC容器。

 

在XmlBeanFactory中,初始化了一个XmlBeanDefinitionReader对象,有了这个Reader对象,那些以XML的方式定义的BeanDefinition就有了处理的地方。对这些XML形式的信息的处理实际上是由这个XMLBeanDefinitionReader来实现的。

 

构建XmlBeanFactory这个IoC容器时,需要指定BeanDefinition的信息来源,而这个信息来源需要封装成Spring中的Resource类来给出。

Resource是Spring用来封装IO操作的类。

ClassPathResource res = new ClassPathResource("bean.xml");
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(res);
 

ApplicationContext的特点

可以通过编程的方式控制这些配置和容器建立过程,但是,在Spring中系统已经为用户提供了许多定义好的容器实现,而不需要开发人员事必躬亲。

1、支持不同的信息源,扩展了MessageResource

2、访问资源

3、支持应用事件,继承了接口ApplicationEventPublisher

 

IoC容器的初始化

BeanDefinition的Resource定位、载入和注册

Spring在实现中把这三个过程分开并使用不同的模块完成的,可以让用户更加灵活地对这三个过程进行剪裁和扩展。

定位: 有ResourceLoader通过统一的Resource接口来完成,这个Resource对各种形式的BeanDefinition的使用提供了统一接口。

载入: 表示成IoC容器的内部数据结构BeanDefinition。

注册: 向IoC容器注册这些BeanDefinition的过程。

 

在IoC容器内部,是通过一个HashMap来持有这些BeanDefinition数据的。

 

NOTE:

1、IoC容器和上下文初始化一般不包括Bean依赖注入的实现。一般而言,依赖注入发生在应用第一次向容器通过getBean索取Bean时。

2、有一个预实例化的过程,是可以配置的。具体来说就是通过在Bean定义信息中lazyinit属性来设定;有了这个预实例化的特性,用户可以对容器初始化过程作一个微小的调控

 

分享到:
评论

相关推荐

    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