默认状况下,从 bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spring容器只存在一个共享的bean实例,默认的配置。 Prototype: 每次对bean的请求都会建立一个新的bean实例。两者选择的原则:有状态的bean都使用Prototype做用域,而对无状态的bean则应该使用singleton做用域。 web
在 Spring2.0中除了之前的Singleton和Prototype外又加入了三个新的web做用域,分别为request、session和 global session。若是你但愿容器里的某个bean拥有其中某种新的web做用域,除了在bean级上配置相应的scope属性,还必须在容器级作一个额外的初始化配置。即在web应用的web.xml中增长这么一个ContextListener: org.springframework.web.context.request.RequestContextListener 以上是针对Servlet 2.4之后的版本。好比Request做用域: spring
注:有状态的bean: session
每一个用户有本身特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每一个用户最初都会获得一个初始的bean。
无状态的bean: spa
bean一旦实例化就被加进会话池中,各个用户均可以共用。即便用户已经消亡,bean 的生命期也不必定结束,它可能依然存在于会话池中,供其余用户调用。因为没有特定的用户,那么也就不能保持某一用户的状态,因此叫无状态bean。但无状态会话bean 并不是没有状态,若是它有本身的属性(变量),那么这些变量就会受到全部调用它的用户的影响,这是在实际应用中必须注意的。