Bean 生命周期
2023-01-09 17:22:07 11 举报
AI智能生成
Bean 生命周期
作者其他创作
大纲/内容
扫描包
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#scanCandidateComponents
通过ResourcePatternResolver获得指定包路径下的所有.class文件(Spring源码中将此文件包装成了Resource对象)
解析Resource对象得到MetadataReader
使用 SimpleMetadataReader 解析c lass 文件
使用 ASM 解析,不需要加载 calss 到 jVM 中
对 MetadataReader 进行过滤
excludeFilters
includeFilters
默认就一个 @Component
基于metadataReader判断是不是对应的类是不是接口或抽象类
生成 BeanDefinition
ScannedGenericBeanDefinition 里面放的是 calssName ,不是 calss 对象
合并 BeanDefinition
xml 中可使用,现在用的少了
加载类
如果 BeanDefinition 中的 beanClass 不是CLass对象 则加载类
实例化前
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation
有返回值,如果为 null ,则不会继续进行
实例化
根据BeanDefinition去创建一个对象
Supplier创建对象
如果设置了则调用Supplier的get()得到对象
工厂方法创建对象
如果设置了就直接创建
推断构造方法
BeanDefinition的后置处理
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
CommonAnnotationBeanPostProcessor
@Resource
AutowiredAnnotationBeanPostProcessor
@Autowired
@Value
@Inject
初始化
执行Aware
BeanNameAware:回传beanName给bean对象。
BeanClassLoaderAware:回传classLoader给bean对象。
BeanFactoryAware:回传beanFactory给对象。
BeanClassLoaderAware:回传classLoader给bean对象。
BeanFactoryAware:回传beanFactory给对象。
初始化前
org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization
InitDestroyAnnotationBeanPostProcessor
@PostConstruct
postProcessBeforeInitialization
处理一堆Aware
初始化
org.springframework.beans.factory.InitializingBean#afterPropertiesSet
initMethod
定义的初始化方法
初始化后
org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization
AbstractAutoProxyCreator
进行AOP的地方
ScheduledAnnotationBeanPostProcessor
@Scheduled
销毁
在Spring容器关闭时会进行销毁
在 RefreshScope 在刷新是也会销毁
DisposableBeanAdapter
适配器,把存在销毁方法的 Bean 都封装好,在容器关闭是进行统一销毁
实现了DisposableBean接口
实现了AutoCloseable接口
BeanDefinition中指定了destroyMethodName
0 条评论
下一页