其实讲的就是spring的生命周期。
从创建 -> 使用 -> 销毁

具体流程

(1) 实例化bean

根据beanDefintion获取指定bean对象的属性信息(参数,构造方法等),然后根据定义实例化bean对象。

(2) 设置对象属性(依赖注入)

容器可查看指定的bean依赖了什么对象,并把相关依赖的bean对象也创建出来。注入的方式有三种,比如通过构造函数,setter方法,接口注入。

(3) 处理Aware接口

如果这个Bean实现了 ApplicationCotextAware 接口,spring容器就会调用我们bean的 setApplicationContext(ApplicationContext) 方法,传入Spring上下文,把spring容器传递给这个bean。
实现BeanNameAware 接口,就可以通过 setBeanName(BeanName) 获取到当前bean的名称。

(4) BeanPostProcessor

如果我们想在bean实例构建好了之后,在这个时间段里,想要对Bean进行一些自定义的处理,那么就可以让Bean实现 BeanPostProcessor 接口,然后重写 postProcessBeforeInitialization(Object obj,String s) 方法。

(5) InitializingBean与init-method

如果bean在Spring配置文件中配置了init-method属性,则会自动调用其配置的初始化方法。
InitializingBean.afterPropertiesSet()

(6) BeanPostProcessor

如果Bean实现了BeanPostProcessor接口,可以在初始化操作后调用 postProcessAfterInitialization(Object obj, String s) 方法。

(7) DisposableBean

当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会回调其实现的 destory() 方法。

(8) destory-method

最后,如果这个Bean的Spring配置中配置了destory-method属性,会自动调用其配置的销毁方法。

相关图解流程

image.png