Bean的生命周期
2022-10-14 09:11:02 0 举报
Spring之Bean的生命周期
作者其他创作
大纲/内容
MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition()#可以对此时的BeanDefinition进行加工AutowiredAnnotationBeanPostProcessor#postProcessMergedBeanDefinition#查找@Autowired注入点,并缓存在injectionMetadataCacheCommonAnnotationBeanPostProcessor#postProcessMergedBeanDefinition#查找@Resource注入点,并缓存在injectionMetadataCache
执行BeanPostProcessor#postProcessBeforeInitializationInitDestroyAnnotationBeanPostProcessor#postProcessBeforeInitialization#负责找出@PostConstruct(初始化前方法)@PreDestroy(销毁方法) #然后执行方法ApplicationContextAwareProcessor#postProcessBeforeInitialization#找出是一些Aware的实现类,执行Aware方法
BeanDefinition的后置处理器
EnvironmentAware:回传环境变量EmbeddedValueResolverAware:回传占位符解析器ResourceLoaderAware:回传资源加载器ApplicationEventPublisherAware:回传事件发布器MessageSourceAware:回传国际化资源ApplicationStartupAware:回传应用其他监听对象,可忽略ApplicationContextAware:回传Spring容器ApplicationContext
实例化
加载类
执行BeanFactory后置处理器
初始化BeanFactory
初始化前
解决循环依赖
进行扫描
初始化
启动ApplicationContext
生成BeanDefinition
合并BeanDefinition
推断构造方法
填充属性后
BeanNameAware:回传beanName给bean对象。BeanClassLoaderAware:回传classLoader给bean对象。BeanFactoryAware:回传beanFactory给对象。
查看当前Bean对象是否实现了InitializingBean接口,如果实现了就调用其afterPropertiesSet()方法
BeanPostProcessor#postProcessAfterInitialization#对Bean最终进行处理AbstractAutoProxyCreator#postProcessAfterInitialization#AOP就是基于初始化后实现的,初始化后返回的对象才是最终的Bean对象。
ClassUtils.getDefaultClassLoader()
#第一个后置处理器InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation()。在实例化前会直接返回一个由我们所定义的对象,会跳过一些步骤,直接执行初始化后这一步。
填充属性/依赖注入
实例化后
创建BeanFactory
执行Aware
初始化后
实例化前
InstantiationAwareBeanPostProcessor#postProcessProperties#进行依赖注入AutowiredAnnotationBeanPostProcessor#postProcessProperties#注入@AutowiredCommonAnnotationBeanPostProcessor#postProcessProperties#注入@Resource
0 条评论
下一页