前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谈谈 Spring Bean 的生命周期和作用域?

谈谈 Spring Bean 的生命周期和作用域?

作者头像
葆宁
发布2019-04-18 15:09:08
5710
发布2019-04-18 15:09:08
举报
文章被收录于专栏:FREE SOLOFREE SOLO

Spring Bean 生命周期比较复杂,可以分为创建和销毁两个过程。

首先,创建 Bean 会经过一系列的步骤,主要包括: 实例化 Bean 对象。 设置 Bean 属性。 如果我们通过各种 Aware 接口声明了依赖关系,则会注入 Bean 对容器基础设施层面的依 赖。 具体包括 BeanNameAware、BeanFactoryAware 和 ApplicationContextAware,分 别会注入 Bean ID、Bean Factory 或者 ApplicationContext。 调用 BeanPostProcessor 的前置初始化方法 postProcessBeforeInitialization。 如果实现了 InitializingBean 接口,则会调用 afterPropertiesSet 方法。 调用 Bean 自身定义的 init 方法。 调用 BeanPostProcessor 的后置初始化方法 postProcessAfterInitialization。 创建过程完毕。

在这里插入图片描述
在这里插入图片描述

第二,Spring Bean 的销毁过程会依次调用 DisposableBean 的 destroy 方法和 Bean 自身定制的 destroy 方法。

Spring Bean 有五个作用域,其中最基础的有下面两种:

Singleton,这是 Spring 的默认作用域,也就是为每个 IOC 容器创建唯一的一个 Bean 实 例。 Prototype,针对每个 getBean 请求,容器都会单独创建一个 Bean 实例。 从 Bean 的特点来看,Prototype 适合有状态的 Bean,而 Singleton 则更适合无状态的情况。 另外,使用 Prototype 作用域需要经过仔细思考,毕竟频繁创建和销毁 Bean 是有明显开销 的。

如果是 Web 容器,则支持另外三种作用域:

Request,为每个 HTTP 请求创建单独的 Bean 实例。 Session,很显然 Bean 实例的作用域是 Session 范围。 GlobalSession,用于 Portlet 容器,因为每个 Portlet 有单独的 Session,GlobalSession 提供一个全局性的 HTTP Session。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年04月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring Bean 生命周期比较复杂,可以分为创建和销毁两个过程。
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档