Bean 生命周期
2023-01-09 17:22:07 10 举报
AI智能生成
登录查看完整内容
Bean 生命周期
作者其他创作
大纲/内容
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#scanCandidateComponents
通过ResourcePatternResolver获得指定包路径下的所有.class文件(Spring源码中将此文件包装成了Resource对象)
使用 SimpleMetadataReader 解析c lass 文件
解析Resource对象得到MetadataReader
excludeFilters
默认就一个 @Component
includeFilters
对 MetadataReader 进行过滤
基于metadataReader判断是不是对应的类是不是接口或抽象类
生成 BeanDefinition
扫描包
合并 BeanDefinition
如果 BeanDefinition 中的 beanClass 不是CLass对象 则加载类
加载类
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation
实例化前
根据BeanDefinition去创建一个对象
如果设置了则调用Supplier的get()得到对象
Supplier创建对象
如果设置了就直接创建
工厂方法创建对象
推断构造方法
实例化
org.springframework.beans.factory.support.MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition
BeanDefinition的后置处理
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
这个扩展点,在Spring源码中基本没有怎么使用
实例化后
AUTOWIRE_BY_NAME
AUTOWIRE_BY_TYPE
自动注入
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor#postProcessProperties
@Resource
CommonAnnotationBeanPostProcessor
@Autowired
@Value
@Inject
AutowiredAnnotationBeanPostProcessor
处理属性
BeanNameAware:回传beanName给bean对象。BeanClassLoaderAware:回传classLoader给bean对象。BeanFactoryAware:回传beanFactory给对象。
执行Aware
@PostConstruct
InitDestroyAnnotationBeanPostProcessor
处理一堆Aware
postProcessBeforeInitialization
org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization
初始化前
org.springframework.beans.factory.InitializingBean#afterPropertiesSet
定义的初始化方法
initMethod
初始化
进行AOP的地方
AbstractAutoProxyCreator
@Scheduled
ScheduledAnnotationBeanPostProcessor
org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization
初始化后
在Spring容器关闭时会进行销毁
在 RefreshScope 在刷新是也会销毁
实现了DisposableBean接口
实现了AutoCloseable接口
BeanDefinition中指定了destroyMethodName
DisposableBeanAdapter
销毁
Bean 生命周期
0 条评论
回复 删除
下一页