Spring 入门学习 —— XML 格式文件介绍(十)(bean 的scope [4])

92 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情

上一篇文章主要内容在介绍singleton,这篇文章我们开始介绍prototype 作用域。

prototype 作用域是什么

prototype 的中文意思是“原型”,对于声明作用域为prototype 类型的bean 来说,容器在接到这个类型的bean 的定义之后,在请求方向容器请求获取这个对象实例的时候,每次容器都会重新生成一个新的实例给到请求方。

所以“原型”的意思就也比较好理解了,即每次获取的时候,都会把这个bean 模板的原本定义按照原型实例化后返回给请求方。

对象实例化及属性设置是容器负责完成的,但是我们根据上面的定义也不难想到,当请求方向容器获取这个实例并且容器将实例给到请求方之后,容器就不再需要这个实例的任何引用了,所以说,这就轮到请求方来负责管理维护这个对象实例的后续声明周期相关的工作了。

所以是,容器在返回给请求方一个新的对象实例之后,就认这个对象实例“自生自灭”了。

在这里我们继续举个例子,为了让读者更好地理解prototype 作用域。

这里我们继续拿公司的场景举例。在公司中,行政同事通常会为我们准备办公用品。比如说签字笔、笔记本,这里我们称呼它们为“办公文具套装”。我们把办公容器套装看做一个bean 的对象模板,在我们每个人像公司这个容器中请求获取办公文具套装的时候,每个人手中拿到的肯定是一套全新的,不会是别人用过的。这种就相当于“prototype”作用域。试想,如果我们的办公套装被设置为了singleton,那么我们拿到的笔记本上可能会存有之前同事写写画画的东西,有可能一些商业机密就会被后续同事看到了,这样肯定是不希望看到的现象。

通常,被声明为prototype 的作用域的bean 的定义都是“有状态”的bean,比如说保存每个客户信息的对象。

总结

这篇文章我们介绍了prototype 作用域的概念。接下来我们介绍其他类型的作用域。