IOC——spring

IOC是一种可以帮助我们解耦各业务对象间依赖关系的对象绑定方式。

一、注入方式(通常我们会说IOC是通过DI来实现的,那么有哪些注入方式呢?)

  • 构造方法注入(对相同类型的参数的处理会比较困难,维护和使用比较麻烦)
  • setter方法注入(侵入性弱,good)
  • 接口注入(退役,强制被注入对象实现不必要的接口,带有侵入性)
  • 关于实现:反射(正常注入)+CGLIB动态生成其子类(方法注入,每一次返回不同的对象)

二、IOC Service Provider的职责(抽象出来的概念,可以指代任何将IOC场景中的业务对象绑定到一起的实现方式)

  • 业务对象的构建管理
  • 业务对象间的依赖绑定
  • 直接编码的方式
  • 配置文件方式
  • 注解的方式

三、BeanFactory—Spring的IOC容器

  • 基础类型IOC容器,提供完整的IOC服务支持。如果没有特殊指定,默认采用延迟初始化策略。
  • BeanFactory,Bean工厂,其实其就像一个工厂,通过“流水线”生产出一个个Bean,然后管理着所有被他“生产”出来的Bean。
  • 其实可以将BeanFactory的实现看作两个阶段:容器启动阶段、Bean实例化阶段。同时spring的IOC容器在实现的时候,在每个阶段都加入了相应的容器扩展点,以便我们可以根据具体场景的需要加入自定义的扩展逻辑。
  • 容器启动阶段:
    • 通过某种途径加载Configuration MetaData。
    • 解析和分析,编组为相应的BeanDefinition(每一个Bean都有一个对应的BeanDefinition,保存着这个类的各种信息)。
    • 将BeanDefinition注册到相应的BeanDefinitionRegistry(定义抽象了Bean的注册逻辑,简单来说就是hold bean definitions),启动工作完成。
  • Bean实例化阶段:
    • 根据准备信息,就可以根据需要生产Bean了,BeanFactory的实现类负责具体Bean的注册和管理工作。

四、ApplicationContext——Spring的IOC容器

  • ApplicationContext是一个更加先进的容器,除了包含BeanFactory的所有功能,还进一步拓展了基本容器的功能,真实“青出于蓝而胜于蓝”!
  • 统一资源加载策略:spring提供了一套基于org.springframework.core.io.ResourceLoader接口的资源抽象和加载策略。
  • 国际化信息支持
  • 容器内部事件发布
  • 多配置模块加载的简化

你可能感兴趣的:(IOC——spring)