spring的应用已经愈来愈普遍了,而Spring IOC在spring中的地位是不可撼动的,在某种角度已经超越了AOP。不少人一提IOC,便张口就来:控制反转。究竟哪些方面被反转了呢?答案是依赖对象的得到被反转了。不少时候,咱们经过多个对象之间的协做来完成一个功能,若是获取所依赖对象靠自身来实现,这将致使代码的耦合度高和难以测试。固然,控制反转还有一个好听的名字:依赖注入。spring
Spring IOC经过引入xml配置,由IOC容器来管理对象的生命周期,依赖关系等。测试
类结构图spa
总体结构图:xml
ClassPathXMLApplicationContext:IOC注入的入口类,提供了读取xml配置文件加载bean到容器的实现方式。对象
AbstractXmlApplicationContext:主要是解析bean文件方法,具体的解析实如今其余类中。blog
AbstractRefreshableConfigApplicationContext:没有更多的实现,主要是对bean配置文件进行文件的路径进行解析。继承
AbstractRefreshableApplicationContext:主要是对容器进行刷新操做。包括当进行从新加载bean文件到容器以前进行容器销毁工做;初始化容器bean工厂DefaultListableBeanFactory;加载配置文件的bean。接口
AbstractApplicationContext:IOC注入的核心处理类,实现了操做上下文的通用方法。经过模板方法的方式,作refresh容器操做,包括了包括解析bean文件,注册bean注入到bean工厂,注册监听等。具体的实现由子类进行实现。生命周期
ConfigurableApplicationContext:此接口定义了容器和上下文相关的通用方法,如刷新容器,获取bean工厂。资源
ApplicationContext:定义操做上下文的通用方法,如获取启动时间等。
ListableBeanFactory:定义操做Bean工厂的通用方法(可列举的bean工厂)。包括获取当前bean工厂的因此bean实例;当前bean工厂的bean数量等等。其默认实现类为DefaultListableBeanFactory。
HierarchicalBeanFactory:有层级的bean工厂。
BeanFactory:最顶层接口,定义了bean工厂的通用方法,包括获取单个bean实例;判断是否为单例模式的bean实例等。
处理流程
核心类介绍
BeanDefinition:定义了bean通用属性及get、set方法。
AbstractBeanDefinition:实现了BeanDefintion接口,定义了bean的通用属性。
RootBeanDefinition:继承于AbstractBeanDefinition类,提供了一些构造方法供实例化。
GenericBeanDefinition:继承于AbstractBeanDefinition类,提供了一些构造方法供实例化。与RootBeanDefinition的不一样之处就在于能够设置和获取父类bean的名字。
PathMatchingResourcePatternResolver:提供了读取资源文件的方式,支持classpath:前缀读取单个资源文件和classptah*:前缀读取下的一组资源文件。最终会返回Resource[]。