概述
Spring
启动,扫描指定的包路径,查找需要被Spring
管理的bean
- 构造
BeanDefinition
对象 - 实例化
bean
,如果有多个构造方法,则需要推断构造方法,确定好构造方法后,进行实例化得到一个对象 - 进行
bean
的属性注入 - 如果
bean
实现了BeanNameAware
接口,Spring
将会bean
的id
传递给setBeanName()
方法 - 如果
bean
实现了BeanFactoryAware
接口,Spring
将会调用setBeanFactory()
方法,将BeanFactory
容器实例传入 - 如果
bean
实现了ApplicationContextAware
接口,Spring
将调用setApplicationContext()
方法,将bean
所在的应用上下文引用传入进来 - 如果
bean
实现了BeanPostProcessor
接口,Spring
将调用postProcessBeforeInitialization()
方法 - 执行
bean
的初始化构造器方法- 如果
bean
的方法中有@PostConstruct
注解标注的方法,Spring
将执行这些方法 - 如果
bean
实现了InitializingBean
接口,Spring
将调用afterPropertiesSet()
方法 - 如果
bean
使用init-method
声明了初始化方法,Spring
将调用这个方法
- 如果
- 如果
bean
实现了BeanPostProcessor
接口,Spring
会调用postProcessAfterInitialization()
方法 - 至此,
bean
已经准备就绪,将会放入容器中 Spring
容器关闭时,执行销毁方法- 如果
bean
的方法中有@PreDestroy
注解标注的方法,则执行这些方法 - 如果
bean
实现了DisposableBean
中的destory()
方法, 则调用destory
方法
- 如果