面试官:说下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源码

最新文章

  1. AutoIt3(AU3)开发的装机小工具,实现快速检测以及一些重用快捷操作功能
  2. BZOJ-1008 越狱 数论快速幂
  3. 在线白板,基于socket.io的多人在线协作工具
  4. skip-name-resolv
  5. CSS3.0动画之hover---Y轴----3D旋转
  6. Reverse Linked List II——LeetCode
  7. 在Java中Arrays工具类实现功能的六种方法
  8. select下拉框
  9. C#多线程编程(2)-- async,await基本用法
  10. BZOJ.4842.[NEERC2016]Delight for a Cat(费用流)
  11. 新建的小程序没有app.js,app.json等文件
  12. Openshift 错误解决 "修改docker cgroup driver"
  13. 阿里巴巴 Weex
  14. python中通过字符串名来调用函数
  15. openstack之cinder_backup对接ceph存储
  16. 从零开始学 Web 之 jQuery(四)元素的创建添加与删除,自定义属性
  17. 修改 this 指向
  18. Linux 时间及时区设置
  19. T4 生成数据库实体类
  20. Eclipse使用之将Git项目转为Maven项目, ( 注意: 最后没有pom.xml文件的, 要转化下 )

热门文章

  1. python全栈开发笔记---------字符串格式化
  2. 为DBNavigator的按钮加中文
  3. Linux下实现ssh免密认证
  4. [Version Control]—— Git如何使用
  5. windows环境安装MySQL
  6. 剑指Offer 50. 数组中重复的数字 (数组)
  7. Linux下初次使用github
  8. PythonStudy——函数的分类 Classification of functions
  9. jenkins构建完成后,执行的命令行的东西也会自动结束的解决办法
  10. Docker概念(二)