bean的scope
1. singleton, scope默认值为singleton
spring容器中 scope='singleton'与单例模式不是一个意思。标记为singleton的bean是由容器来保证这种类型的bean在同一个容器中只存在一个共享实例;而Singleton模式则是保证在同一个Classloader中只存在一个这种类型的实例。
可以从两个方面来看待singleton的bean所具有的特性。
1). 对象实例数量。 singleton类型的bean定义,在一个容器中只存在一个共享实例,所有对该类型bean的依赖都引用这一单一实例。
2). 对象存活时间。 singleton类型bean定义, 从容器启动,到它第一次被请求而实例化开始,只要容器不销毁或者退出,该类型bean的单一实例就会一直存活。
2. prototype
针对声明为拥有prototype scope的bean定义,容器在接到该类型对象的请求的时候,会每次都重新生成一个新的对象实例给请求方。 容器每次返回给请求方一个新的对象实例之后,容器就不再拥有当前返回对象的引用,就任由这个对象实例“自生自灭”了。
对于那些请求方不能共享使用的对象类型,应该将其bean定义的scope设置为prototype。这样,每个请求方可以得到自己对应的一个对象实例。通常,声明prototype的scope的bean定义类型,都是一些有状态的,比如保存每个顾客信息的对象。