读书笔记-SpringIoc

《Sping技术内幕:深刻解析Spring架构与设计原理第2版》

什么是Spring Ioc

在开发应用时,常常须要进行组件间的调用,这种依赖关系若是固化在组件设计中,就会形成依赖关系的僵化和维护难度的增长,Ioc容器就是让获取资源的方向反转,主动管理这些依赖关系,将这些依赖关系注入到组件中,会让这些依赖关系的适配和管理更加灵活。编程

常见的注入方式:

一、接口注入数据结构

二、setter注入架构

三、构造器注入框架

Ioc容器的设计与实现:

BeanFactorypost

  • 定义了Ioc容器的基本的形式;spa

  • 提供了Ioc容器应该遵照的最基本的服务契约;设计

  • 是咱们使用Ioc容器所应该遵照的最基本的编程规范;xml

典型的几个实现:接口

XmlBeanFactory生命周期

DefaultListableBeanFactory

编程的方式使用DefaultListableBeanFactory

Resource resource = new ClassPathResource("XmlBeanFactory.xml", getClass());
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(resource);

 

ApplicationContext

  • 扩展了MessageSource接口,支持不一样的信息源,能够支持国际化的实现,为开发多语言版本应用提供服务

  • 访问资源,体如今ResourceLoader对Resource接口的支持上,咱们能够从不一样的地方获得Bean的定义

  • 支持应用事件

  • 提供了一系列的附加服务,使得ApplicationContext与BeanFactory相比是一种面向框架的使用风格,企业级项目中,以ApplicationContext为Ioc容器的基本形态。

使用Ioc容器时,须要如下几个步骤:

1)建立Ioc文件的抽象资源,其中包含了BeanDefinition的信息;

2)建立BeanFactory,这里使用了DefaultListableBeanFactory

3)建立BeanDefinition的读取器,这里使用 XmlBeanDefinitionReader来载入Xml文件形式的BeanDefinition,经过一个回调配置给BeanFactory

4)解析BeanDefinition,完成载入和注册Bean后,能够直接使用Ioc容器了。

 

Ioc的初始化过程

  1. 资源定位

    由ResourceLoader经过统一的Resource接口来完成

  2. BeanDefinition的载入

    将用户定义好的Bean表示成Ioc容器内部的数据结构

  3. 向Ioc容器注册 BeanDefinition,是调用BeanDefinitionRegistry接口完成的

Ioc容器初始化入口:refresh()

  1. 预启动

  • 设置启动时间

  • 将active flag设置为true

  • 初始化属性资源

  • 检查必须的一些属性配置

      2.建立DefaultListableBeanFactory

      三、对BeanFactory进行一系列的设置

      四、调用BeanFactory的后置处理器

      五、注册BeanFactory的后置处理器

      六、初始化MessageSource

      七、初始化上下文中的事件机制

      八、初始化一些比较特殊的Bean

      九、检查监听Bean,并向容器注册这些Bean

     十、实例化全部的(non-lazy-init)单例Bean

     十一、发布事件,结束容器的启动

Ioc容器中Bean的生命周期:

  • Bean实例的建立

  • 为Bean实例设置属性

  • 调用Bean的初始化方法

  • 应用经过Ioc容器使用Bean

  • 当关闭容器时,调用Bean的销毁方法

lazy-int属性和预实例化

若是设置lazy-int属性时,依赖注入发生在Ioc容器的初始化的过程当中

lazy-int预实例化发生在 refresh()中的finishBeanFactoryInitialization中

FactoryBean

Spring 在使用FactoryBean时,使用了工厂模式;

FactoryBean是Spring中的一个接口;

它提供了三个功能:

  1. T getObject()

  2. Class<?> getObjectType();
  3. boolean isSingleton();

FactoryBean的生产特性 是在getBean中起做用的。

BeanPostProcessor

这个接口提供了两个功能能:

Object postProcessBeforeInitialization(Object bean, String beanName) 
Object postProcessAfterInitialization(Object bean, String beanName)

autowiring(自动依赖装配)的实现

Bean对Ioc容器的感知

Spring提供特定的aware接口实现Bean对Ioc容器的感知

相关文章
相关标签/搜索