java面试题嘟嘟程序猿

面试官:说下spring生命周期 程序员:不会 那你先回去等消息

2019-05-15  本文已影响266人  f2e846d35b91

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自身的方法:<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方法 就会被调用

<bean init-method="init"> 初始化方法init

BeanPostProcessor(后处理),执行postProcessAfterInitialization

这时Bean准备就绪,可以执行业务逻辑被服务方调用了,Bean会一直存活在应用上下文中,直到应用上下文被销毁。

Bean实现DisposableBean,spring将执行destory方法

<bean destroy-method="destroy"> 指定销毁方法 destroy

实战开发中Bean很少都去实现上面的全部接口,一般最多init-method、destroy-method

BeanNameAware源码

BeanFactoryAware源码

ApplicationContextAware源码

BeanPostProcessor源码 【before/after】

InitializingBean源码

DisposableBean源码

Spring源码

我的其他技术文章,欢迎一起学习交流

java基础知识总结列表

java技术学习列表

泛型方法

分布式事务

java设计模式

多线程例子

多线程学习

欢迎工作一到五年的Java工程师朋友们加入Java架构师:697558955

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

上一篇 下一篇

猜你喜欢

热点阅读