看图说话
- 实例化bean:反射的方式创建bean
- 填充bean属性:
populateBean()
,循环依赖的问题(三级缓存) - 调用aware接口相关的方法:invokeAwareMethod(),完成
BeanName
,BeanClassLoader
,BeanFactory
对象的属性设置 - 调用BeanPostProcessor中的前置处理方法:使用比较多的有(ApplicationContextPostProcessor,设置
Environment
,EmbeddedValueResolver
,ResourceLoader
,ApplicationEventPublisher
,MessageSource
,ApplicationContext
,ServletContext
等对象) - 调用initmethod方法:
invokeInitmethod()
,判断是否实现了initializingBean接口,如果有,调用afterPropertiesSet方法,没有就不调用 - 调用
BeanPostProcessor
的后置处理方法:spring的aop就是在此处实现的,AbstractAutoProxyCreator;注册Destuction相关的回调接口 - 获取到完整的对象,可以通过
getBean
的方式来进行对象的获取 - 销毁流程,1,判断是否实现了
DispoableBean
接口 2,调用destroyMethod()
方法