Spring bean的生命周期-------个人理解篇

SpringBean生命周期总概括

SpringBean周期大致分为以下几个步骤:实例化、属性设置、初始化、对象使用、销毁;
还有些说,创建前准备、创建实例、依赖注入、容器缓存、销毁实例
步骤其实大同小异,换汤不换药。

实例化

创建前准备:
bean在开始加载之前,从上下文配置中去解析并且查找Bean有关的扩展实现,
比如:像init-method,容器在初始化bean时调用;
destroy-method,容器在销毁bean时调用;
beanFactoryPostProcessor这一类的bean加载过程中一些处理扩展实现
创建实例:
通过createBeanInstance方法 反射创建bean的实例对象,扫描bean声明的一些属性;
说到反射:大概类似下面这种获取方式

①、获取class对象
Class clazz = Class.forName("");
Class clazz = 类名.class;
Class clazz = 对象名.getClass();
②、获取构造器
Constructor ctor = clazz.getDeclaredConstructor()
③、创建对象
Object obj = ctor.newInstance()

属性设置

其实就是依赖注入,
设置自定义属性 populateBean 调用set方法赋值
设置容器对象属性 invokeAwareMethods 调用aware相关接口 【容器对象,例如:beanFactory 、ApplicationContext】
检查aware相关依赖并设置对应的一些相关依赖,其实就是设置容器属性

上述方法完成,对象是可以直接拿来使用,
但是要判断是否要对bean对象进行扩展,所以要执行一个前置处理方法 ;;;有前置肯定也会有有后置

初始化

执行前置处理方法

BeanPostProcessor对应的是postProcessBeforeInitialization

紧接着调用初始化方法

实现一个初始化bean的接口, invokeInitMethods

判断当前bean是否实现了一个叫InitializingBean接口,
如果实现了,会调用AfterPropertiesSet方法

执行后置处理方法

BeanPostProcessor对应的postProcessAfterInitialization
在后置处理方法里面 完成代理对象的创建 (代理) jdkDynamicAopProxy cglibAopProxy

讲到BeanPostProcessor ,都知道AOP

Aop 底层实现原理  动态代理   
jdk 
cglib

将bean对象交给容器来管理

对象使用

对象销毁

先注册销毁的相关调用接口,再执行bean真正销毁对应的方法

一般面试问题

beanFactory 与 ApplicationContext 区别
【ApplicationContext是beanFactory 的子类实现】
beanFactory是访问Spring容器的根接口,里面提供了某些基本方法的约束规范,
为满足更多需求,ApplicationContext实现了此接口,并在此接口基础上做了某些扩展功能
提供了更加丰富的api调用
beanFactory  Factorybean 都可创建对象
beanFactory  必须严格遵守bean生命周期,经过繁琐处理才能创建单例对象,流水式创建
---------------------------------------------------------------------------
Factorybean  自定义bean对象创建流程,不用按照bean生命周期,
此接口包含三个方法:
①、isSingleton   是否单例对象
②、getobjectType 获取对象类型
③、getobject     自己创建对象,使用new 或者代理对象都可以
用户按照自己意愿随意创建
spring中用到的设计模式
单例模式:spring 中bean都是单例的
工厂模式 beanFactory
代理模式:aop动态代理
策略模式:xmlBeanDefinitionReader
// 了解
模板方法:postProcessorBeanFactory  onRefresh
观察者模式:listener event multicast 
适配器模式 adapter
装饰者模式:beanWrapper
责任链模式:使用aop的时候会有
委托者模式:delegate
建造者模式:builder
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值