Spring 框架支持多种 bean 的作用域(Scope),主要包括以下几种:
-
单例作用域(Singleton):
- 默认作用域,Spring 容器中只创建一个共享的 bean 实例。所有对该 bean 的请求都会返回这个共享的实例。
- 示例:
@Component @Scope("singleton") // 这个注解可以省略,因为 singleton 是默认作用域 public class MySingletonBean { }
-
原型作用域(Prototype):
- 每次请求 bean 时都会创建一个新的实例。
- 示例:
@Component @Scope("prototype") public class MyPrototypeBean { }
-
请求作用域(Request):
- 每个 HTTP 请求都会创建一个新的 bean 实例,适用于 Web 应用程序。
- 示例:
@Component @Scope("request") public class MyRequestBean { }
-
会话作用域(Session):
- 每个 HTTP 会话都会创建一个新的 bean 实例,适用于 Web 应用程序。
- 示例:
@Component @Scope("session") public class MySessionBean { }
-
应用作用域(Application):
- 在一个 ServletContext 中创建一个共享的 bean 实例,适用于 Web 应用程序。
- 示例:
@Component @Scope("application") public class MyApplicationBean { }
-
WebSocket 作用域(WebSocket):
- 每个 WebSocket 会话会创建一个新的 bean 实例。
- 示例:
@Component @Scope("websocket") public class MyWebSocketBean { }
自定义作用域:
- 除了上述内置作用域,Spring 还允许用户定义自定义作用域。可以通过实现
org.springframework.beans.factory.config.Scope
接口并注册到ConfigurableBeanFactory
中来创建自定义作用域。
示例:
public class CustomScope implements Scope {
// 实现 Scope 接口的方法
}
@Bean
public CustomScope customScope() {
return new CustomScope();
}
@Autowired
private ConfigurableBeanFactory beanFactory;
@PostConstruct
public void registerCustomScope() {
beanFactory.registerScope("customScope", customScope());
}
这些作用域为 Spring 应用提供了灵活的 bean 管理方式,开发者可以根据具体需求选择合适的作用域。