在Spring容器中,Bean的作用域定义了Bean实例的生命周期和可见范围。Spring框架提供了以下五个常用的Bean作用域:
1. 单例(Singleton):单例作用域是Spring容器中默认的作用域。当Bean的作用域被设置为单例后,Spring容器会在初始化时创建一个单独的Bean实例,并在整个应用程序中共享使用。每次请求获取该Bean时,都会返回同一个Bean实例。
2. 原型(Prototype):原型作用域表示每次请求获取Bean时,Spring容器都会创建一个新的Bean实例。每次调用`applicationContext.getBean("beanName")`都会返回一个新的独立的Bean实例。
3. 会话(Session):会话作用域表示每个会话(Session)范围内共享一个Bean实例。在基于Web的应用程序中,Spring会为每个会话创建一个Bean实例,并在会话结束时销毁该实例。
4. 请求(Request):请求作用域表示每个HTTP请求都会创建一个新的Bean实例。在基于Web的应用程序中,Spring会为每个请求创建一个Bean实例,并在请求结束后销毁该实例。
5. 全局会话(Global Session):全局会话作用域只适用于基于Portlet的Web应用程序,表示在全局会话期间共享一个Bean实例。在Portlet环境中,全局会话在用户跨多个页面或Portlet之间持久化。
这些Bean作用域可以通过在Bean定义的时候使用`@Scope`注解或在XML配置文件中的`<bean>`元素中通过`scope`属性来指定。根据具体的需求,开发人员可以选择适合的作用域来控制Bean实例的创建和共享方式。
需要注意的是,除了以上提到的作用域,Spring还提供了其他一些非常规的作用域,如自定义作用域、线程作用域等,可以根据具体的业务需求进行使用和扩展。