spring ioc解析

一.概述

产品化,定制化,核心。扩展功能在核心之上进行。

统一的bean的抽象表示:BeanDefinition.

核心是管理bean的生命周期及依赖注入。

可扩展性也表现在bean的生命周期中,可以加入用户的一些代码来对bean进行操作。

bean生命周期如下:
创建实例 -> BeanFactoryPostProcessor处理,设置bean的属性性。
-> BeanPostProcessor的postProcessBeforeInitialization
->InitializingBean的afterProperties
->init-method
->BeanPostProcessor -> postProcessAfterInitialization
->DisposableBean的destroy

二.基本流程
1.查找bean配置
ResourceLoad
2.解析bean配置成BeanDefinition
BeanDefinitionReader
3.注册BeanDefinition
BeanRegister
4.看是不是lazyinit,不是的话,创建bean实例
5.执行bean的一些生命周期处理类

三.架构
核心思路是单一职责。不同接口有不同的功能,相应的产品容器组合实现相应的接口。
比如ApplicationContext定义成高级容器,它有的功能包括:
1.查找BeanDefinition
继承ResourcePatternResolver->ResourceLoader

2.解析BeanDefinition
3.注册BeanDefinition
4.实现化bean
5.执行相应用户对bean做的操作埋点,eg:InitializingBean

ApplicationContext的默认实现是:
AbstractRefreshableApplicationContext

内部有个模板方法:
1.建立BeanFactory基本容器
2.查找BeanDefinition配置
3.将BeanDefinition配置解析成BeanDefinition
4.执行BeanFactoryPostProcessor
DefaultListableBeanFactory
5.如果是singleton,且是非lazyinit则实例化
6.执行BeanPostProcessor的before方法
7.执行initiallizingBean的afterProperties方法
8.执行init-method
9.执行BeanPostProcessor的after方法





猜你喜欢

转载自blog.csdn.net/zhaozhenzuo/article/details/77340959