ioc创建过程
2024-01-22 21:47:07 11 举报
spring 中bean定义到成熟bean的完整流程,包括bean的生命周期
作者其他创作
大纲/内容
返回一级缓存中的bean
afterPropertiesSet()
postProcessAfterInstantiation()
ResourceLoaderAware
选择实例化使用的构造函数
determineCandidateConstructors()
初始化initializeBean()
invokeAwareMethods()
BeanNameAware
实例化createBeanInstance()
getBean(beanName);
true
这里可以阻断bean的创建实现自定义实例返回
第六次调用bean的后置处理器InstantiationAwareBeanPostProcessor
postProcessAfterInitialization()
关闭容器时还会调用扩展方法
postProcessProperties()
singletonsCurrentlyInCreation()添加标记,表示正在创建bean
ApplicationContextAwareProcessor
初始化前 调用加了@PostConstruct注解的方法
addSingleton()放入一级缓存singletonObject存放bean
第五次调用bean的后置处理器InstantiationAwareBeanPostProcessor
createBean()开始创建bean
BeanClassLoaderAware
为AOP创建代理
第二次调用bean的后置处理器SmartInstantiationAwareBeanPostProcessor
getSingleton(beanName);先从bean的一级缓存中获取bean,如果拿到bean的实例就直接返回如果拿不到再进行创建
FALSE
第七次调用bean的后置处理器InitDestroyAnnotationBeanPostProcessor
@Resource @value @Autowired 注解的进行属性赋值
ApplicationEventPublisherAware
BeanFactoryAware
销毁时调用
第三次调用bean的后置处理器MergedBeanDefinitionPostProcessor
postProcessMergedBeanDefinition()
第四次调用bean的后置处理器SmartInstantiationAwareBeanPostProcessor
postProcessBeforeInitialization()
继承DisposableBean接口的bean销毁前调用 destroy()
close
doGetBean
doCreateBean()真正的开始创建bean,进入bean的生命周期
EmbeddedValueResolverAware
判断bean是不是factorybean
MessageSourceAware
InitializingBean
解决循环引用的AOP
第九次调用bean的后置处理器DestructionAwareBeanPostProcessor
标准@PreDestroy 的方法在bean销毁前调用
返回实现FactoryBean接口的特殊bean
invokeCustomInitMethod()
通过反射或者工厂创建bean
配置类实现bean销毁前调用配置destroy-method的方法
InstantiationAwareBeanPostProcessor第一次调用bean的后置处理器
ApplicationContextAware
getEarlyBeanReference()
postProcessBeforeInstantiation()
Bean的生命周期
属性赋值populateBean()
EnvironmentAware
TRUE
requiresDestruction()
对bean的扩展执行继承InitializingBean的afterPropertiesSet()实现
第八次调用bean的后置处理器BeanPostProcessor
Bean扩展Aware接口
0 条评论
回复 删除
下一页