面试官:说下spring生命周期 程序员:不会 那你先回去等消息吧
Bean实现了BeanNameAware,Spring会将Bean的ID透传给setBeanName
java、后端开发、程序员、spring
经常被面试问到的题目之一
面试失败经历
面试官:请介绍一下Spring框架中Bean的作用域及生命周期?
程序汪汪:不知道
面试官:你工作好多年了,(嫌弃的眼神)那你可以回去等电话
Spring框架中Bean的5个作用域
singleton单例:是spring默认缺省的,全局只有一个对象。
prototype原型:每次都是新的Bean实例,有状态的Bean建议用此类型。
request:一次Http请求中,容器返回同一实例Bean,仅在当前Http Request内有效
session:一次Http Session中,容器返回同一实例Bean,仅在当前Session内有效。
global session:一个全局的Http Session中,容器返回同一个实例Bean。
很多程序员开发,很可能都没注意Bean竟然有这么多种作用域,其实实际项目一般就前面2种会涉及到,但面试官喜欢问。
Bean的生命周期
我多找几个比较好的图,大家对比着理解理解
好多接口好多方法啊,来我们分个类
Bean自身的方法:的init-method和destor-method方法
Bean级生命周期接口方法:包含了BeanNameAware、BeanFacotyAware、InitialiZingBean和DisposableBean 接口方法
Spring容器生命周期接口方法:有BeanPostProcessor"后处理器"
bean对象实例化,默认Bean作用域singleton
Spring对bean进行依赖注入
Bean实现了BeanNameAware,Spring会将Bean的ID透传给setBeanName
Bean实现了BeanFacotryAware或ApplicationContentAware,Spring会调用设置工厂setBeanFatory方法并将BeanFacoty实例透传进来,或SetApplicationContext方法被调用,Spring将应用上下文引用透传到Bean里。
Bean实现了BeanPostProcessor(后处理),bean的postProcessBeforeInitialization方法会被执行
Bean实现了InitializingBean,bean的afterPropertiesSet方法 就会被调用初始化方法init
BeanPostProcessor(后处理),执行postProcessAfterInitialization
这时Bean准备就绪,可以执行业务逻辑被服务方调用了,Bean会一直存活在应用上下文中,直到应用上下文被销毁。
Bean实现DisposableBean,spring将执行destory方法
指定销毁方法 destroy
实战开发中Bean很少都去实现上面的全部接口,一般最多init-method、destroy-method
BeanNameAware源码
BeanFactoryAware源码
ApplicationContextAware源码
BeanPostProcessor源码 【before/after】
InitializingBean源码
DisposableBean源码
Spring源码