【Java】深入理解Spring Bean作用域:单例、原型与其他作用域 |
您所在的位置:网站首页 › spring中bean的默认作用域 › 【Java】深入理解Spring Bean作用域:单例、原型与其他作用域 |
目录 一、前言 二、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实例生命周期的执行过程如下: 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 |