Spring框架分析(一)IOC 应用原理分析

        Spring框架的核心是IOC和AOP,IOC是一种设计思想,基于这种思想可以实现对象创建,对象的科学管理以及应用时的解耦(借助DI机制实现)。Spring框架核心就是基于这种机制进行了完美实现。今天我们就说一说Spring的IOC容器。
        我们知道IOC,我们称其为控制反转。在spring中,他是指我们把对象的管理权交给spring,由spring来帮助我们管理对象,实现对象的统一管理。我们在使用任何框架的时候,都要先去了解框架,然后了解框架的使用需要哪些配置,之后,我们需要进行正确的配置之后,才能正常使用框架。spring也是一样,我们在使用之前也需要进行配置,spring 的配置分为注解配置和xml文件配置。不管什么样的配置,spring都为我们提供了完美的解析方案,只要我们正确配置完成之后。spring容器会对我们的配置解析并存放在IOC容器中。我们称之为Spring IOC Contanier。
        我们都知道,我们把对象交给spring来管理。我们在获取对象时,一般是从spring的对象工厂。我们称之为BeanFactory。本篇文章,我将从spring的BeanFactory开始,一直倒推,最终到达我们的配置文件。来解释一下Spring IOC容器的初始化过程。

Spring IOC Contanier的初始化过程

BeanFactory

        BeanFactory就是一个对象工厂。我们把对象交给Spring来管理之后。我们要想使用对象都是从这里来获取。首先来说,它是一个接口,而且有好多子接口和实现类,我们先来看一下。
在这里插入图片描述
在这里插入图片描述
        我们可以看到,太多了。我们关注我圈住的那个接口ApplicationContext,它间接继承了BeanFactory这个接口,而且还继承了BeanFactory其他的一些子接口。这个类我们应该很熟悉,我们一般会用他来加载Spring配置文件。如下:
        ApplicationContext ctx =new FileSystemXmlApplicationContext(“xxx.xml”);

ApplicationContext

        ApplicationContext 提供了一个上下文环境,加载spring的配置文件只是他其中的一个功能。它继承与BeanFactory,所以他也具有BeanFactory的功能。获取bean对象,创建bean实例,解析消息的功能。所以我们以前在获取bean对象的时候,才可以通过创建ApplicationContext 对象来获取我们想要的实例。我们观察一下ApplicationContext中的方法。
在这里插入图片描述

AnnotationConfigApplicationContext、ClassPathXMLApplicationContext和BeanDefinition

在这里插入图片描述
        我们能看到的很少,其实不止这么多,因为它继承了很多接口,所以他也具备了它所继承的接口的方法。我们看到,他有两个实现类叫:AnnotationConfigApplicationContext、ClassPathXMLApplicationContext,这两个类对应的我们的xml配置方式和注解配置方式的配置信息。他们提供了解析并存储配置信息的方法。这里不对他的解析过程进行分析。这两个类在对我们的配置文件进行解析之后,交给了一个叫BeanDefinition的接口。这个接口的实现类中存放了我们的配置信息。它提供了很多方法来操作我们的配置信息。如下图:
在这里插入图片描述
        最终这些配置信息会被存放在一个Map中,Map的结构,我们以他的一个实现类DefaultListableBeanFactory为例来看愿意看。
在这里插入图片描述
        我们看到这里定义了好多Map,其中被我圈住的有一个beanDefinitionMap的属性,他就是一个Map,键类型是String,值类型就是BeanDefinition。bean实例的管理和配置信息类似,这些实例也是存放Map中,并存放IOC容器。这些Map就存放在Spring的IOC容器中,Spring在构建对象时,就会从这些Map中获取bean的配置信息,然后实例化出对象,所以IOC容器中有两个主要的Map,一个Map是存放配置信息的,一个Map是存放bean实例的。这两个Map同时存在IOC容器中被Spring统一管理。
        最后还是留两张图吧,帮助大家理解。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值