Spring 面试题, Spring Bean 一共有几种作用域?
Spring 面试题, Spring Bean 一共有几种作用域?
QA
Step 1
Q:: Spring Bean 一共有几种作用域?
A:: Spring Bean 有五种常用的作用域,分别是:
1. singleton:
默认作用域,每个容器中只创建一个实例。
2. prototype:
每次请求都会创建一个新的 Bean 实例。
3. request:
在 Web 应用中,每个 HTTP 请求都会创建一个 Bean 实例。
4. session:
在 Web 应用中,每个 HTTP session 都会创建一个 Bean 实例。
5. application:
在 Web 应用中,每个 ServletContext 都会创建一个 Bean 实例。
Step 2
Q:: Spring 中如何定义 Bean 的作用域?
A:: 在 Spring 中,可以通过 @Scope 注解或在 XML 配置文件中使用 scope 属性来定义 Bean 的作用域。例如,使用 @Scope("prototype")
注解可以将某个 Bean 定义为 prototype 作用域。
Step 3
Q:: Singleton 和 Prototype 作用域有什么区别?
A:: Singleton 作用域确保容器中只有一个 Bean 实例,并且每次注入时都会返回相同的实例。Prototype 作用域则每次注入都会返回一个新的实例。Singleton 适用于无状态的 Bean,而 Prototype 则适用于需要频繁创建新实例的场景。
Step 4
Q:: 如何在 Spring 中创建自定义的 Bean 作用域?
A:: 可以通过实现 org.springframework.beans.factory.config.
Scope 接口并注册到 ConfigurableBeanFactory 中来创建自定义的作用域。你需要实现 get 方法返回 Bean 实例,以及 remove 方法用于销毁 Bean 实例。