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()方法被回调