站在某一高度分析Spring源码之Spring_IOC(一)

spring的应用已经越来越广泛了,而Spring IOC在spring中的地位是不可撼动的,在某种角度已经超越了AOP。很多人一提IOC,便张口就来:控制反转。究竟哪些方面被反转了呢?答案是依赖对象的获得被反转了。很多时候,我们通过多个对象之间的协作来完成一个功能,如果获取所依赖对象靠自身来实现,这将导致代码的耦合度高和难以测试。当然,控制反转还有一个好听的名字:依赖注入。

Spring IOC通过引入xml配置,由IOC容器来管理对象的生命周期,依赖关系等。

类结构图

整体结构图:

f8538ed1db2cfb7f0aa88031631cc675316.jpg

 

ClassPathXMLApplicationContext:IOC注入的入口类,提供了读取xml配置文件加载bean到容器的实现方式。

AbstractXmlApplicationContext主要是解析bean文件方法,具体的解析实现在其他类中。

AbstractRefreshableConfigApplicationContext:没有更多的实现,主要是对bean配置文件进行文件的路径进行解析。

AbstractRefreshableApplicationContext主要是对容器进行刷新操作。包括当进行重新加载bean文件到容器之前进行容器销毁工作;初始化容器bean工厂DefaultListableBeanFactory;加载配置文件的bean。

AbstractApplicationContextIOC注入的核心处理类,实现了操作上下文的通用方法。通过模板方法的方式,做refresh容器操作,包括了包括解析bean文件,注册bean注入到bean工厂,注册监听等。具体的实现由子类进行实现。

ConfigurableApplicationContext:此接口定义了容器和上下文相关的通用方法,如刷新容器,获取bean工厂。

ApplicationContext:定义操作上下文的通用方法,如获取启动时间等。

ListableBeanFactory:定义操作Bean工厂的通用方法(可列举的bean工厂)。包括获取当前bean工厂的所以bean实例;当前bean工厂的bean数量等等。其默认实现类为DefaultListableBeanFactory。

HierarchicalBeanFactory:有层级的bean工厂。

BeanFactory:最顶层接口,定义了bean工厂的通用方法,包括获取单个bean实例;判断是否为单例模式的bean实例等。

处理流程

d9623a05ce1620abaf29c3397d9d62eda29.jpg

核心类介绍

BeanDefinition:定义了bean通用属性及get、set方法。

AbstractBeanDefinition:实现了BeanDefintion接口,定义了bean的通用属性。

RootBeanDefinition继承于AbstractBeanDefinition类,提供了一些构造方法供实例化。

GenericBeanDefinition继承于AbstractBeanDefinition类,提供了一些构造方法供实例化。与RootBeanDefinition的不同之处就在于可以设置和获取父类bean的名字。

PathMatchingResourcePatternResolver:提供了读取资源文件的方式,支持classpath:前缀读取单个资源文件和classptah*:前缀读取下的一组资源文件。最终会返回Resource[]。

 

转载于:https://my.oschina.net/u/3759047/blog/3050632

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值