介绍
@scope相当于传统application-config.xml配置文件中<bean scope>中的scope属性
<bean id="XXX" class="com.XXX.XXXXX" scope="XXXX" />
scope称:作用域,在 Spring IoC 容器是指其创建的 Bean 对象相对于其他 Bean 对象的请求可见范围。
在 Spring IoC 容器中具有以下几种作用域:
- 基本作用域(singleton、prototype)
- Web 作用域(reqeust、session、globalsession)
- 自定义作用域
详细解释
prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例
singleton:默认值,单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例
request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效
session:对于每次HTTP Session,使用session定义的Bean都将产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效
globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效
例子
搭配@bean注解使用
@Configuration
public class ApplicationConfig {
@Bean
@Scope("prototype")
public OrderService orderService() {
return new OrderService(orderRepository());
}
}