前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring框架中IOC容器中对象的作用域

Spring框架中IOC容器中对象的作用域

作者头像
吉林乌拉
发布2019-08-14 17:38:36
1K0
发布2019-08-14 17:38:36
举报
文章被收录于专栏:吉林乌拉吉林乌拉

在IOC容器中我们可以使用scope属性来设置对象的作用域。在IOC容器中主要为对象提供了5种类型的作用域。我们分别看看它们具体的区别。

  • singleton

在IOC容器中只存在一个实例,也就是通过singleton作用域创建的对象是单例的。

这两个对象的内存地址相同,这就说明了当前对象确实是一个单例对象了。

  • prototype

第次从IOC容器中获取对象时,都返回一个新对象。

  • request

每次HTTP请求都会创建一个新的对象,当请求结束时则会自动销毁这个对象。该作用域只针对Web环境中使用。

  • session

同一个HTTP Session共享一个对象,不同的HTTP Session使用不同的对象,当这个Session结束时销毁这个对象。该作用域也是只针对Web环境中使用的。

  • globalSession

同一个全局Session共享一个对象,该作用域也是只针对Web环境中使用的。

  • 延迟加载

我们知道当我们使用ApplicationContext接口启动IOC容器时,会自动的实例化所有singleton作用域的对象,这一点和BeanFactory不同。虽然这么做IOC容器启动时会很耗时,但是这样做也有这样做的好处。就是初始化后的对象会被存储在IOC容器的缓存中,这样当我们使用对象时,就不用在实例化对象了,从而提高了程序的运行效率。另一个好处就是可以帮助我们早点发现问题,如果我们配置的对象有问题时,则会直接在启动阶段抛出异常,而不是在程序的运行阶段。当然每种方式都有每种方式的好处与弊端,如果我们不想在启动时实例化对象,那么我们可以直接用spring为我们提供的lazy-init属性延迟我们对象的实例化。也就是说当把lazy-init属性值设置为true,然后通过ApplicationContext接口启动IOC容器时,当前对象是不会在启动阶段实例化的,而是在运行时才会实例化当前对象。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吉林乌拉 微信公众号,前往查看

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

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

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