https://www.processon.com/diagraming/5fa102a9f346fb44166f23bc
一、Bean实例化和DI
1、扫描XML文件/注释类/Java配置类中的bean定义
2、创建bean实例
3、注入类依赖项(调用setter,为自动装配字段设置值)
二、检查Spring Awareness
4、如果bean类型实现了BeanNameAware,则调用setBeanName()
5、如果bean类型实现了BeanClassLoaderAware,则调用setBeanClassLoader()
6、如果bean类型实现了ApplicationContextAware,则调用setApplicationContext()
三、创建bean生命周期回调
7、如果存在@PostConstruct注释,则使用它注释调用方法
8、如果bean类型实现了InitializingBean,则调用afterPropertiesSet()
9、如果bean定义包含init-method或@Bean(initMethod="")则调用初始方法
四、销毁bean生命周期回调
10、如果存在@PreDestroy注释,则使用它注释调用方法
11、如果bean类型实现了DisposableBean,则调用destroy()
12、如果bean定义包含destroy-method或@Bean(destroyMethod="")则调用销毁方法