美文网首页
IOC——spring

IOC——spring

作者: 远o_O | 来源:发表于2017-07-23 12:04 被阅读14次

    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

          本文链接:https://www.haomeiwen.com/subject/hpaxhxtx.html