容器初始化
初始化是由refresh()方法来启动的
初始化过程
Resource定位,ResourceLoader定义过程
BeanDefinition的载入
BeanDefinition的注册
IoC容器的依赖注入
依赖注入发生的时间
用户第一次通过getBean方法向IoC容索要Bean时,IoC容器触发依赖注入
当用户在Bean定义资源中为< Bean >元素配置了lazy-init属性,即让容器在解析注册Bean定义时进行预实例化,触发依赖注入
bean的生命周期
实例化一个Bean
按照Spring上下文对实例化的Bean进行配置
BeanNameAware#setBeanName(String)方法的实现
BeanFactoryAware#setBeanFactory的实现,设置工厂
ApplicationContextAware#setApplicationContext:设置传入Spring上下文
BeanPostProcessor#postProcessBeforeInitialization
InitializingBean#afterPropertiesSet,如果定义init-method,调用
BeanPostProcessor
DisposableBean
destroy-method
自动装配的实现
实现过程
对Bean的属性迭代调用getBean方法,完成依赖Bean的初始化和依赖注入
将依赖Bean的属性引用设置到被依赖的Bean属性上
将依赖Bean的名称和被依赖的Bean的名称存储在IoC容器的集合中