5. Bean 的作用域和生命周期
发布人:shili8
发布时间:2025-03-02 18:19
阅读次数:0
**Bean 的作用域和生命周期**
在 Spring 框架中,Bean 是一个 Java 对象,它被 Spring IoC 容器管理。Bean 的作用域和生命周期是理解 Spring 应用程序的关键方面。
###1. Bean 的作用域Spring 支持多种 Bean 作用域,每个作用域都有其特定的使用场景:
* **singleton**:这是默认的作用域,Spring IoC 容器中只有一个 Bean 实例。
* **prototype**:每次从 Spring IoC 容器中请求 Bean 时,都会创建一个新的实例。
* **request**:在 Web 应用程序中,每次 HTTP 请求都会创建一个新的 Bean 实例。
* **session**:在 Web 应用程序中,每次 HTTP 会话都会创建一个新的 Bean 实例。
* **application**:在 Web 应用程序中,整个应用程序生命周期内只会创建一个 Bean 实例。
###2. Bean 的生命周期Bean 的生命周期从其创建到销毁的过程:
1. **实例化**:Spring IoC 容器根据配置文件或 Java 配置类创建 Bean 实例。
2. **依赖注入**:Spring IoC 容器将 Bean 的依赖注入到 Bean 中。
3. **初始化**:Bean 在使用之前会进行一些必要的初始化工作。
4. **使用**:Bean 可以被应用程序使用了。
5. **销毁**:当 Bean 不再需要时,Spring IoC 容器会将其销毁。
###3. Bean 的配置Bean 的配置可以通过 XML 文件或 Java 配置类来实现:
#### XML 配置
xml<bean id="user" class="com.example.User"> <property name="name" value="John"/> </bean>
#### Java 配置类
java@Configurationpublic class AppConfig { @Bean public User user() { return new User("John"); } }
###4. Bean 的注入Bean 的依赖可以通过构造函数、setter方法或 Java 注解来注入:
#### 构造函数注入
javapublic class User { private String name; public User(String name) { this.name = name; } }
#### setter 方法注入
javapublic class User { private String name; public void setName(String name) { this.name = name; } }
#### Java 注解注入
java@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface Value { String value(); } public class User { @Value("John") private String name; }
###5. Bean 的使用Bean 可以通过 Spring IoC 容器来获取:
javaApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); User user = (User) context.getBean("user"); System.out.println(user.getName());
###6. Bean 的销毁Bean 的销毁可以通过 Spring IoC 容器来实现:
javapublic class AppConfig { @Bean public User user() { return new User("John") { @Override protected void finalize() throws Throwable { System.out.println("User bean is being destroyed."); super.finalize(); } }; } }
通过上述内容,我们可以了解 Bean 的作用域和生命周期,以及如何配置、注入和使用 Bean。