SpringBean 元信息

元信息的配置
- 通过资源的方式配置,如: XML、 Properties、Groovy
- 通过注解配置 : @Bean
- 通过API配置 :BeanDefinitionBuilder / GenericBeanDefinition
元信息的读取
1) Get beanDefinitionRegistry for registry beanDefinitions.
2) Get ResourceLoader
3) Get ClassLoader.
- 读取通过资源方式配置,如:XmlBeanDefinitionReader、PropertiesBeanDefinitionReader、GroovyBeanDefinitionReader
- 读取注解配置的Bean:AnnotatedBeanDefinitionReader

| 1 | DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); | 
元信息的解析

图片版本的看不太清,整理一份文字版本的层级关系,除BeanDefinitionParser是顶层抽象接口外,其余Parser都是类或者抽象类。
- BeanDefinitionParser- SpringConfiguredBeanDefinitionParser
- AnnotationDrivenCacheBeanDefinitionParser
- ScriptingDefaultsParser
- ComponentScanBeanDefinitionParser
- AnnotationConfigBeanDefinitionParser
- AspectJAutoProxyBeanDewfinitionParser
- SpringConfiguredBeanDefinitionParser
- ConfigBeanDefinitionParser
- AnnotationDrivenBeanDefinitionParser
- AbstractBeanDefinitionParser- MBeanExportBeanDefinitionParser
- MBeanServiceBeanDefinitionParser
- ScriptBeanDefinitionParser
- AbstractSingleBeanDefinitionParser- ExecutorBeanDefinitionParser
- SchedulerBeanDefinitionParser
- SetBeanDefinitionParser
- AbstractPropertyLoadingBeanDefinitionParser
- LoadTimeWeaverBeanDefinitionParser
- CacheAdviceParser
- ListBeanDefinitionParser
- ScheduledTasksBeanDefinitionParser
- MapBeanDefinitionParser
- PropertiesBeanDefinitionParser
- PropertyPathBeanDefinitionParser
- AbstractSimpleBeanDefinitionParser- ConstantBeanDefinitionParser
- AbstractJndiLocatingBeanDefinitionParser- JndiLookupBeanDefinitionParser
- LocalStatelessSessionBeanDefinitionParser
- RemoteStatelessSessionBeanDefinitionParser
 
 
 
 
 
SpringBean 注册
| 1 | @Override | 
Spring BeanDefinition 合并阶段
GenericBeanDefinition -> RootBeanDefinition
Spring Bean Class 加载阶段
BeanDefinition 中定义的Class名称加载具体的Class类。
ClassLoader 类加载
Java Security 安全控制
ConfigurableBeanFactory 临时 ClassLoader
Spring Bean 实例化
   实例化前:
     InstantiationAwareBeanProcessor.postProcessorBeforeInstantiation()
     提前生成一些代理对象,替换掉默认的springIOC的实现内容。
   实例化
     传统实例化方式
       + 实例化策略 InstantiationStrategy
构造器依赖注入(根据类型来注入)   实例化后
        InstantiationAwareBeanProcessor.postProcessorAfterInstantiation()
Spring Bean 属性赋值前阶段
   Bean的属性值元信息: PropertyValues
   构造器参数值:ConstructorValues
   Bean属性赋值前回调
    <= 5.0  InstantiationAwareBeanPostProcessor#postProcessorPropertyValues();
    >= 5.1 InstantiationAwareBeanPostProcessor#postProcessorProperties();
Spring Bean Aware 接口回调阶段
 Aware接口是一个标志接口,并没有提供任何实现。
 BeanNameAware
 BeanClassLoaderAware
 BeanFactoryAware
 EnvironmentAware
 EmbeddedValueResolverAware
 ApplicationEventPublisherAware
 MessageSourceAware
 ApplicationContextAware
Spring Bean 初始化
   初始化前
   BeanPostProcessor#postProcessorBeforeInitialization
   初始化
   @PostConstructor
   AfterPropertiesSet
   init-method
   初始化后
   BeanPostProcessor#postProcessAfterInitialization
   初始化完成
   SmartinitializingSingleton#afterSingletonsInstanted
AbstractAutowireCapableBeanFactory
| 1 | /** | 
Spring  Bean 销毁
    销毁前
      DestructionAwareBeanPostProcessor#postProcessorBeforeDestruction
    销毁
      @PreDestroy
      实现DisposableBean接口的destroy方法
      自定义销毁方法
    垃圾回收
      关闭Spring 容器
      执行GC
      SpringBean 覆盖finalize()方法被回调
