Spring之Bean(作用域、生命周期)
发布日期:2021-05-16 13:53:47 浏览次数:18 分类:精选文章

本文共 1448 字,大约阅读时间需要 4 分钟。

Spring Bean作用域与生命周期深入解析

Spring作为一个完善的依赖注入框架,其核心 ideologies 中,Bean的作用域与生命周期是最为重要的概念之一。本文将详细探讨Spring中Bean的作用域以及其生命周期的相关知识。

Bean作用域概述

在Spring中,Bean的作用域定义了一个Bean在应用程序中的存在范围及生命周期。默认情况下,Spring容器会将Bean注册为单例,即每个Bean在容器中只存在一个实例,即使多次获取也是同一实例。这与Java中的单例模式有所不同。

需要注意的是:Spring中的单例是基于BeanFactory的,即Spring IOC容器

五大作用域分类

Spring提供了五种Bean作用域,其中三种作用域仅适用于基于Web的SpringApplicationContext环境:

  • singleton

    • Bean在Spring容器中仅存在一个实例,默认作用域。
    • 即使Bean未被作用其它地方也会预先实例化。
  • prototype

    • 每次请求时都会创建一个新的Bean实例。
    • 与singleton有本质的区别,后者是预先实例化,前者是按需创建。
  • request

    • 适用于Web环境,每次HTTP请求都会创建一个新的Bean实例。
  • session

    • Bean在一个Http Session中共享一个实例,不同Session使用不同的实例。
  • globalSession

    • 类似于前面提到的Session,但用于基于portlet的Portlet应用环境。
  • Bean作用域的特点

    singleton作用域

    • 特点:在Spring容器中仅存一个Bean实例,后续获取总是获取同一实例。
    • 优点:提高性能,及早发现配置错误。

    prototype作用域

    • 特点:每次得到Bean时都获取一个新实例。
    • 优点:灵活性高,但需谨慎处理资源管理。

    Bean的实例化与生命周期

    在Spring中,Bean的实例化和销毁遵循明确的流程。虽然大多数Bean不需要自定义处理接口,但了解其内在逻辑有助于优化配置和调试。

    实例化过程

  • 获取BeanDefinition:容器需要明确Bean的定义。
  • 依赖注入:利用容器进行递止单体注入。
  • BeanNameAware接口处理:如果Bean实现该接口,会自动调用setBeanName()。
  • BeanFactoryAware接口处理:传递BeanFactory实例。
  • Bean生命周期

    在Spring中,Bean的生命周期包括如下阶段:

  • 初始化方法调用:在初始化后立即调用init-method
  • 依赖注入:利用@Autowired<property>进行依赖注入。
  • 后初始化处理:调用BeanPostProcessor接口的相关方法。
  • 全生命周期处理:调用InitializingBeaninit-method接口。
  • 销毁处理:若Bean实现DisposableBean接口,则调用destroy()方法。
  • interface方法的调用

    虽然大多数Bean不需要自定义处理接口,但了解接口方法的调用机制有助于定位问题和优化配置。

    需要注意的是:很多Bean不需要手动处理接口,默认设置会提供几乎完整的生命周期管理。

    总结

    通过本文的内容,readers已经掌握了Spring中Bean作用域及生命周期的关键知识。了解这些知识点对于优化Spring应用配置、提高开发效率至关重要。此外,熟悉Bean的生命周期也能帮助定位开发过程中出现的问题。

    上一篇:Spring AOP具象化理解(代理模式)
    下一篇:Spring常用注解整理说明

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月19日 20时37分54秒