跳到主要内容

简述Spring 中如何定义 Bean 的范围?

参考答案:

在Spring框架中,你可以通过@Scope注解来定义Bean的作用范围。Spring提供了几种预定义的作用范围:

  1. Singleton:这是默认的作用范围。Spring IoC容器中只会有一个此Bean的实例。无论多少次请求,始终返回的都是同一个实例。
@Bean
@Scope("singleton")
public MyBean myBean() {
    return new MyBean();
}
  1. Prototype:每次从容器中请求Bean时,都会创建一个新的Bean实例。
@Bean
@Scope("prototype")
public MyBean myBean() {
    return new MyBean();
}
  1. Request:在一个HTTP请求内,Bean是单例的。这通常用于Web应用中,确保在处理一个特定的HTTP请求时,所有的Bean都是同一个实例。
@Bean
@Scope("request")
public MyBean myBean() {
    return new MyBean();
}
  1. Session:在一个HTTP Session内,Bean是单例的。这通常用于Web应用中,确保在处理一个特定的HTTP Session时,所有的Bean都是同一个实例。
@Bean
@Scope("session")
public MyBean myBean() {
    return new MyBean();
}
  1. Application:在一个ServletContext生命周期内,Bean是单例的。这通常用于Web应用中,确保在处理整个Web应用时,所有的Bean都是同一个实例。
@Bean
@Scope("application")
public MyBean myBean() {
    return new MyBean();
}
  1. WebSocket:在一个WebSocket生命周期内,Bean是单例的。这通常用于WebSocket应用中,确保在处理一个特定的WebSocket连接时,所有的Bean都是同一个实例。
@Bean
@Scope("websocket")
public MyBean myBean() {
    return new MyBean();
}

除了这些预定义的作用范围,你还可以自定义自己的作用范围。为此,你需要实现Scope接口,并提供一个对应的Scope注解。

注意:不是所有的作用范围都适用于所有的应用。例如,如果你正在开发一个非Web应用,那么requestsessionapplicationwebsocket这些作用范围就没有意义。选择合适的作用范围取决于你的应用需求和上下文。