zoukankan      html  css  js  c++  java
  • Spring之IOC容器初始化过程

    Ioc容器的初始化是由refresh()方法来启动的,这个方法标志着Ioc容器的正式启动。

    具体来说这个启动过程包括三个基本过程:

    1.BeanDifinition的Resource定位

    2.BeanDifinition的载入与解析

    3.BeanDifinition在Ioc容器中的注册

    需要注意的是,Spring把这三个过程分开,并使用不同的模块来完成,如使用相应的ResourceLoader、BeanDifinitionReader等模块,通过这样的实际方式,可以让用户更加灵活的对这三个过程进行剪裁和扩展。

    定义出最适合自己的Ioc容器的初始化过程。

    第一个过程:BeanDifinition的Resource定位

    这个Resource定位指的是BeanDifinition的资源定位,它由ResourceLoader通过统一的Resource接口来完成,这个Resource对各种形式的BeanDifinition的使用都提供了统一的接口。

    对于这些BeanDifinition的存在形式,相信大家都不会感到陌生。比如,

    在文件系统中的Bean定义信息可以使用FileSystemResource来进行抽象。

    在类路劲中的Bean定义信息可以使用ClassPathResource。

    这个定位过程类似于容器寻找数据的过程,就想水桶装水先要把水找到一样。

    第二个过程:BeanDifinition的载入

    这个载入过程是把用户定义好的Bean表示成Ioc容器内部的数据结构,而这个容器内部的数据结构就是BeanDifinition。具体来说,BeanDifinition实际上就是POJO对象在IOC容器中的抽象,通过这个BeanDifinition定义的数据结构,使IOC容器能够方便的对POJO对象也就是Bean进行管理。

    第三个过程:BeanDifinition的注册

    这个操作是通过调用BeanDifinitionRegistry借口来实现的。这个注册过程把载入过程中解析得到的BeanDifinition向Ioc容器进行注册。在阅读源码中可知,在IOC容器内部将BeanDifinition注入到一个HashMap中去,Ioc容器就是通过这个HashMap来持有这些BeanDifinition数据的。

    这里说到的Ioc容器的初始化过程,一般不包含Bean依赖注入的实现。在Ioc的设计中,Bean定义的载入和依赖注入是俩个独立的过程。依赖注入一般发生在应用第一次通过getBean向容器索取Bean的时候。(使用预实例化的配置除外)

    (本文根据阅读《Spring技术内幕》所做笔记)

  • 相关阅读:
    Python生成器
    Python函数之传参
    前端之HTML
    联合分组、子查询、视图、事务、python操作mysql、索引
    单表查询和连表查询具体操作
    字段详细操作、多表关系、外键关联和级联关系以及增、删、改的操作
    数据库与表的其他操作、字段的操作、数据类型、字段的约束条件
    协程
    初识数据库
    线程Queue、定时器、进程池和线程池、同步异步
  • 原文地址:https://www.cnblogs.com/myadmin/p/5838795.html
Copyright © 2011-2022 走看看