标签:
Spring bean定义时,实际上是创建类实例的配方,这意味着,通过这个配方,即可创建该类的很多对象。Spring框架支持的5种作用域:
单例作用域为默认的作用域,单例bean只会产生一个该bean对应的类型的实例对象,对于所有的请求,Spring容器都只会返回一个实例。这个实例被存储在Spring容器的单例池缓存中,之后所有对该bean对象的请求和引用,都将从该单例缓存池中取,而不是再生成新的对象。
但是,需要注意的点是该单例缓存并不是我们之前在设计模式中所了解到的狭隘的类加载器级别的单例概念。在设计模式中的单例是指每一个类加载器内都会产生单例类的一个实例。但是对于,Spring的单例是指,在整个Spring容器生存范围内都只会产生一个类实例。Spring中,bean默认的作用域都是单例作用域。例如:
当一个bean被定义为prototype,对于每次请求都将返回一个该类的新实例,也就是所,原型bean注入另一个bean,或者是请求原型bean,都是通过在容器上调用getBean()方法产生的。一般来说,原型bean用于有状态的bean,单例bean用于无状态bean。其实,对于原型bean来说,Spring容器仅仅是替换了new操作符而已,对于产生的bean对象的所有的生命周期管理,在Spring实例化后,都将交由客户端进行处理,Spring不进行任何原型bean的完整的生命周期的管理,因此客户端代码必须清理原型对象并且手动释放该原型bean所持有的资源。为了让Spring容器释放该原型bean持有的资源,可以用自定义的bean[post-processor],它持有需要被清理bean的引用。
断网,剩下的三个下次补上。
译文参考资料来源:https://github.com/b2gats/stone-docs/blob/master/spring-4-beans.md#beans-factory-scopes-prototype
标签:
原文地址:http://www.cnblogs.com/booth-sun/p/5437249.html