SpringIOC加载流程

SpringIOC加载流程

  1. IOC是在Spring启动后初始化环境和上下文对象完成后开始执行的

  2. 首先是创建BeanFactory,并将它的引用交给ApplicationContext,解析xml中配置的Bean,将他们封装成BeanDefinition对象,并放入HashMap中

    BeanDefinition对象中封装了IOC初始化需要用到的所有信息,例如全限定名,是否懒加载,注入的属性,作用域等等。

  3. 准备BeanFactory对象,为他设置类加载器,以及设置一些Spring环境中的特殊类,在注入时直接可以返回,防止重复创建;手动添加了几个BeanFactoryPostProcessor后置处理器(注册监听器、Aware接口的回调)

  4. BeanFactory对象创建完成,开始执行后置处理器,除了Spring中定义好的以外,可能还会有用户或者框架定义的BeanFactoryPostProcessor,如MyBatis专门用于注册Mapper接口的处理器。

  5. 至此Bean的初始化完成(还未实例化),注册BeanPostProcessor,执行Bean初始化完成的前置处理,这里也是可以自己拓展的点。

  6. 这里还会有一些国际化、事件监听器的注册处理不细说了。

  7. 接着进入重头戏,Bean的实例化。

    • 进行实例化前会有一系列的判断,懒加载、抽象类、AOP的切面类等等这些不会被实例化。

    • 处理FactoryBean,它和普通Bean不同的是,它的实现类是一个工厂类,Spring会调用定义的工厂类实例化对象,例如MyBatis的Mapper就是自定义了工厂类动态代理的生成对象。

    • 处理普通Bean,根据BeanDefinition对象中的全限定类名反射创建,然后注入它的属性,引用对象则为递归创建(循环引用问题,Spring都是按照先实例化后注入属性,实例化后会放入缓存中,如果遇到循环引用则会从缓存当中取出来,防止出现死循环)

  8. Bean实例化全部完成后,调用BeanPostProcessor中的后置处理方法,这里可拓展。

  9. 发布Bean实例化完成事件,观察者模式的应用,监听器再做其他操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值