Spring生命周期
2022-09-08 11:19:04 14 举报
Spring生命周期
作者其他创作
大纲/内容
是否实现DisposableBean
先解析别名为实际名称若要FactoryBean本身,需要使用&名称获取
BeanPostProcessor后置处理(代理bean wrappedBean)
refresh
解析类
BeanDefinitionRegistryPostProcessor
Application
编写XML/注解
XML
singleton单例
对象的实例化
把创建好的代理Bean放入
BeanFactoryPostProcessor
填充Bean的自定义属性
destory-method自定义
BeanFactoryPostProcessor增强beanDefinition信息
使用
IO流
重要拓展点
单继承
BeanFactoryAware
多实现
销毁对象
session
初始化
接口
封装BeanDefinition存储Spring Bean的元数据,如@Scope,@Lazy,@DependsOn
ApplicationContextAware
AbstracAutoProxyCreator增强器 / 后置处理器
createBeanInstance
BeanNameAware
一级缓存:map容器
对象的初始化
doCreateBean创建Bean
父子节点node
从容器中获取并使用对象
document
BeanPostProcessor前置处理
执行构造方法在堆中开辟空间,对象的属性都是默认零值
CGLib代理对象
Aware接口invokeAwareMethods()
singletonFactories三级缓存放单例工厂
Spring Bean的生命周期
销毁
通过set方法赋值
AbstractAutowireCapableBeanFactory(1)populateBean(2)applyBeanPostProcessorsBeforeInitialization(3)applyBeanPostProcessorsAfterInitialization(4)initializeBean
earlySingletonObjects二级缓存,放单例工厂的产品提前单例对象
阶段5:创建bean
后置处理器/增强器
方法有内容
背诵
解决既有循环依赖,又有代理的情况
检查是否实现InitializingBean接口决定是否调用
getBean()从此处获取
抽象类
BeanPostProcessor增强bean信息
依赖注入
容器Bean(spring定义)
创建对象
自上而下:先定义规范,再开发
saxdom4j
设置BeanDefinition
setter
doGetBean()
阶段2:检查父工厂
属性注入
1、详细描述Fbean的生命周期2、spring中有 哪些重要的扩展点BeanPostProcessor3、BeanFactory和ApplicationContext的区别是什么?接口与实现类4、BeanFactory和FactoryBean有什么区别都是用来创建对象的 - BeanFactory:必须遵循【完整的生命周期】去创建对象(流水线) - FactoryBean:创建对象,但是没有标准的流程(私人订制)5、谈谈你对spring的理解
afterPropertiesSet
doGetBean
阶段7:销毁bean
createBean
方法无内容
1,获取class对象Class class = Class.forName(\"\");Class class =类名.class;Class class = 对象名.getClass();2,获取构造器Constructor ctor = class.getDeclaredConstuctor();3,instance创建对象Object obj = ctor.newInstance();
通过BeanDefinition反射创建Bean对象
阶段3:检查DependsOn
检测Aware相关的接口设置Bean的容器对象属性
创建bean实例
BeanFactory根接口
解决循环依赖
自下而上:从类中抽取公共部分
激活自定义的 init 方法init-method
BeanPostProcessor
Spring Bean
prototype多例
实例化Bean在堆中申请空间,属性默认值
解析XML/注解,得到BeanDefinition
(1)填充属性(2)执行初始化init-method方法
放入 二级缓存earlySingleton Objects
阶段4:按scope创建bean
原始对象
普通Bean(用户定义)
创建前准备
PostProcessor增强器 / 后置处理器
Bean
阶段1:处理名字,检查缓存
扫描
request
为什么用反射,而不用new?
populateBean
实例化Spring容器
注解
懒汉式
反射
根据依赖关系,调整创建次序
三级缓存提前暴露对象
singletonObjects一级缓存单例成品对象(单例池256)
ApplicationContext
getBean
beanfactoryapplictioncontext
populateBean属性填充
父子容器的bean可以重名优先找子容器的bean,找到直接返回
初始化Bean - initializeBean()
阶段6:类型转换
登记可销毁Bean
0 条评论
下一页