在IoC容器最顶级接口BeanFactory 中,有 isSingleton(单例), isPrototype (原型)
两个方法,isSingleton 方法如果返回true ,则bean在IoC容器中以单例存在,这是spring
IoC容器的默认值。
isPrototype 是true 则每次获取bean的时候会创建一个新的bean。
单例(singleton),原型(pototype)即 bean的两种作用域。
spring 共有以下几种作用域
作用域类型 | 使用范围 | 作用域描述 |
---|---|---|
singleton | 所用spring应用 | 默认值,IoC容器只存在单例 |
prototype | 所有spring应用 | 每当从ioc容器中获取一个bean,则创建一个新的bean |
session | spring web 应用 | http 会话 |
application | spring web 应用 | web工程生命周期 |
request | spring web 应用 | web 单次请求 |
globalSession | spring web 应用 | 在一个全局的httpsession 中,一个bean对应一个实例。 |
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)中
ConfigurableBeanFactory 只有两种类型 SCOPE_SINGLETON, SCOPE_PROTOTYPE
如果想使用 spring web 容器的四种类型,需要使用 WebApplicationContext 去定义其他作用域
如:SCOPE_REQUEST (请求),会话 ( SCOPE_SESSION ) 和应用 ( SCOPE
APPLICATION ) 。