其实讲的就是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属性,会自动调用其配置的销毁方法。