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 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 