Bean 的作用域,这里的作用域并不是程序代码中,变量的作用范围,而是指对象的创建的模式。Spring 5 之后有如下几个方式:
singleton (default)
指的是一个 Spring 容器中仅有一个实例,即改 Bean 是单例存在的。是 Spring 中的默认方式
prototype
和 singleton 想反,每次从容器获取对象,都是获得一个新的实例。
request
这个作用域只有在 web 项目中有效,指的是同一个 http 请求中,获取容器中的实例都是单例的。
session
同样的,只在 web 项目中有效,在每一次 session 的生命周期中,获取的容器中的实例都是单例的。
application
只在 web 项目中有效,在每一次 Servlet 上下文的生命周期中,获取的容器中的实例都是单例的。
websocket
只在 web 项目中有效,在每一次 WebSocket 的生命周期中,获取的容器中的实例都是单例的。
对于某个对象,指定作用域,可以使用 Scope 注解,如下:
@Component
@Scope("prototype")
public class BeanClass {
}