【Java】深入理解Spring Bean作用域:单例、原型与其他作用域

您所在的位置:网站首页 spring中bean的默认作用域 【Java】深入理解Spring Bean作用域:单例、原型与其他作用域

【Java】深入理解Spring Bean作用域:单例、原型与其他作用域

2024-07-16 16:00| 来源: 网络整理| 查看: 265

目录

一、前言

二、Bean的作用域基础概念

三、Bean作用域

1、单例singleton

2、原型prototype

3、会话session、请求request、全局对话global-session

4、自定义作用域

四、作用域的选择和注意事项

五、实际应用示例

六、Bean的生命周期

七、总结

一、前言

在Spring框架中,Bean作用域是控制Bean实例创建和管理的重要概念。不同的作用域决定了Bean在容器中的生命周期和共享方式。本文将详细介绍Spring Bean的作用域,包括单例、原型以及其他一些作用域的使用方式和实际应用。

二、Bean的作用域基础概念

当在 Spring 中定义一个 bean 时,你必须声明该 bean 的作用域的选项。例如,为了强制 Spring 在每次需要时都产生一个新的 bean 实例,你应该声明 bean 的作用域的属性为 prototype。同理,如果你想让 Spring 在每次需要时都返回同一个bean实例,你应该声明 bean 的作用域的属性为 singleton。

三、Bean作用域 1、单例singleton

单例作用域是默认的作用域,它表示在整个应用中只存在一个Bean实例。无论有多少次请求,都将返回同一个Bean实例。这有助于节省资源,但需要注意线程安全性。

2、原型prototype

原型作用域表示每次请求都会创建一个新的Bean实例。每次使用Bean时都会获得一个新的实例,适用于状态不可共享的情况

3、会话session、请求request、全局对话global-session 会话作用域表示在一个会话期间存在一个Bean实例,适用于Web应用中。请求作用域表示在一次HTTP请求中存在一个Bean实例。全局会话作用域表示在全局会话期间存在一个Bean实例。 4、自定义作用域

除了以上几种常见作用域,Spring还允许开发者自定义作用域,以满足特定的需求。通过实现org.springframework.beans.factory.config.Scope接口,可以创建自定义作用域。

四、作用域的选择和注意事项 选择作用域要根据具体需求和业务场景,考虑性能、线程安全性和资源占用等因素。单例作用域适用于无状态的Bean,原型作用域适用于有状态或需要频繁创建的Bean。注意线程安全性,如果Bean有状态且会在多线程环境下使用,要确保正确处理状态。 五、实际应用示例

 考虑一个在线购物应用,购物车对象可能适合使用原型作用域,以确保每个用户都有独立的购物车状态。而商品信息对象可能适合使用单例作用域,以便节省资源并提高性能。

六、Bean的生命周期

Bean实例生命周期的执行过程如下:

Spring对bean进行实例化,默认bean是单例;

Spring对bean进行依赖注入;

如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法;

如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来;

如果bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到bean中;

如果bean实现了BeanPostProcessor接口,它的postProcessBeforeInitialization方法将被调用;

如果bean实现了InitializingBean接口,spring将调用它的afterPropertiesSet接口方法,类似的如果bean使用了init-method属性声明了初始化方法,该方法也会被调用;

如果bean实现了BeanPostProcessor接口,它的postProcessAfterInitialization接口方法将被调用;

此时bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁;

若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用;

七、总结

 Spring Bean作用域决定了Bean实例的生命周期和共享方式,影响了应用的性能和状态管理。根据具体需求,选择适当的作用域能够更好地管理Bean实例,提高应用的质量和性能。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3