Spring Bean 支持哪几种作用域?
Spring框架支持以下五种作用域:
- Singleton(单例):这是默认的作用域。在这个作用域中,Spring IoC 容器只会创建一个实例,每次请求都会返回同一个实例。这对于需要共享状态的对象非常有用。
-
Prototype(原型):在这个作用域中,每次请求都会创建一个新的实例。这对于需要独立状态的对象非常有用。
-
Request(请求):在这个作用域中,每个HTTP请求都会创建一个新的Bean。这个作用域仅在Web应用环境下有效。
-
Session(会话):在这个作用域中,每个HTTP会话都会创建一个新的Bean。这个作用域也仅在Web应用环境下有效。
-
Application(应用):在这个作用域中,Bean的生命周期与ServletContext的生命周期相同。也就是说,Bean的生命周期与整个Web应用的生命周期相同。
-
WebSocket(WebSocket会话):在这个作用域中,每个WebSocket会话都会创建一个新的Bean。这个作用域也仅在Web应用环境下有效。
通过在@Bean注解或XML配置中指定作用域,可以控制Spring Bean的生命周期。例如,下面的代码将BookService的作用域设置为Prototype,这意味着每次注入BookService时,都会创建一个新的实例:
@Bean(scope = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public BookService bookService() {
return new BookService();
}