定义bean的时候可以选择性的声明bean的作用域。Spring支持以下五种作用域,其中的三个只有在使用web-aware 应用上下文的时候才能被使用:
singleton:这个作用域指的是在每个Spring IoC容器中以单例的方式创建bean,这也是创建bean的默认方式;
prototype:这个作用域指的是定义任意多个对象实例;
request:这个作用域指的是一个HTTP请求期间,这个只在Spring的web应用上下文中有效;
session:该作用域指的是一个HTTP会话(session)期间,这个只在Spring的web应用上下文中有效;
global-session:这个作用域指的是一个全局的HTTP会话(session)期间,这个只在Spring的web应用上下文中有效。
单例作用域(The singleton scope):
如果作用域被定义成单例,则Spring IoC容器实际上只会创建一个由该bean定义的对象实例。这个单一的实例被存储在一个类似单例beans的缓存中,所有随后对此的请求都会返回这个缓存中的对象。Spring bean的默认作用域都是单例的。如果你想创建一个指定为单例的bean,你可以在配置文件中指定该bean的作用域属性为singleton,如下:
<!-- A bean definition with singleton scope -->
<bean id="..." class="..." scope="singleton">
<!-- collaborators and configuration for this bean go here -->
</bean>
原型作用域(The prototype scope):
如果作用域被定义为prototype,则Spring IoC容器会在每次请求指定bean的时候都生成一个新的对象实例。原则上讲所有的全状态的bean定义为prototype,把所有无状态的bean定义为singleton。例子如下:
<!-- A bean definition with singleton scope -->
<bean id="..." class="..." scope="prototype">
<!-- collaborators and configuration for this bean go here -->
</bean>
singleton:这个作用域指的是在每个Spring IoC容器中以单例的方式创建bean,这也是创建bean的默认方式;
prototype:这个作用域指的是定义任意多个对象实例;
request:这个作用域指的是一个HTTP请求期间,这个只在Spring的web应用上下文中有效;
session:该作用域指的是一个HTTP会话(session)期间,这个只在Spring的web应用上下文中有效;
global-session:这个作用域指的是一个全局的HTTP会话(session)期间,这个只在Spring的web应用上下文中有效。
单例作用域(The singleton scope):
如果作用域被定义成单例,则Spring IoC容器实际上只会创建一个由该bean定义的对象实例。这个单一的实例被存储在一个类似单例beans的缓存中,所有随后对此的请求都会返回这个缓存中的对象。Spring bean的默认作用域都是单例的。如果你想创建一个指定为单例的bean,你可以在配置文件中指定该bean的作用域属性为singleton,如下:
<!-- A bean definition with singleton scope -->
<bean id="..." class="..." scope="singleton">
<!-- collaborators and configuration for this bean go here -->
</bean>
原型作用域(The prototype scope):
如果作用域被定义为prototype,则Spring IoC容器会在每次请求指定bean的时候都生成一个新的对象实例。原则上讲所有的全状态的bean定义为prototype,把所有无状态的bean定义为singleton。例子如下:
<!-- A bean definition with singleton scope -->
<bean id="..." class="..." scope="prototype">
<!-- collaborators and configuration for this bean go here -->
</bean>