spring bean什么时候被回收

fiy 其他 65

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring中的Bean是被Spring容器管理的,它们的生命周期由容器控制。Spring容器负责创建、初始化、使用和销毁Bean对象。对于一个Bean对象的回收,取决于两个因素:一是Bean的作用域,二是容器的关闭。

    1. Bean的作用域:
      Spring中定义了多种作用域来控制Bean对象的生命周期。常见的作用域有Singleton、Prototype、Request、Session等。

      • Singleton:是Spring默认的作用域,表示一个Bean对象在整个应用程序中只有一个实例。当容器关闭时,Singleton作用域的Bean会被销毁。
      • Prototype:表示一个Bean对象可以有多个实例,每次获取Bean时都会创建一个新的实例。对于Prototype作用域的Bean,Spring容器不会负责它们的销毁,需要手动进行销毁操作。
      • Request:表示一个Bean对象在一次HTTP请求中只有一个实例,随着请求的结束,Bean会被销毁。
      • Session:表示一个Bean对象在一个HTTP会话中只有一个实例,当会话结束时,Bean会被销毁。
    2. 容器的关闭:
      当Spring容器关闭时,容器会销毁所有的Bean对象。容器关闭时的具体时机可以由开发者手动控制,也可以通过配置文件或注解来自动关闭容器。

    需要注意的是,对于Singleton作用域的Bean,即使容器关闭,它们的生命周期可能并未结束。某些情况下,Singleton作用域的Bean可能会被持有引用,导致无法被垃圾回收。因此,在使用Singleton作用域的Bean时,需要特别注意及时释放资源,以避免内存泄漏问题。

    综上所述,Spring中的Bean在容器关闭时被回收,具体回收时机取决于Bean的作用域。对于Singleton作用域的Bean,容器关闭时会被销毁;对于Prototype作用域的Bean,需要手动进行销毁操作;对于Request和Session作用域的Bean,随着请求或会话的结束,会被自动销毁。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring框架是一个轻量级的Java开发框架,它提供了一种管理和组织应用程序的方式。在Spring框架中,Bean是指由Spring容器管理的对象。Spring容器负责创建、初始化和销毁Bean对象。那么,Spring Bean何时被回收呢?

    1. 生命周期结束:当Bean的生命周期结束时,它将被销毁和回收。Bean的生命周期由Spring容器控制,通常包括以下阶段:实例化、依赖注入、初始化、使用、销毁。当Bean完成了所有的业务逻辑后,它将被销毁。可以通过实现DisposableBean接口或在Bean配置中声明销毁方法来定义Bean的销毁逻辑。

    2. 容器关闭:当Spring容器关闭时,所有的Bean将被销毁。当应用程序退出时,Spring容器会调用每个Bean的销毁方法,释放资源和清理工作。可以通过实现ApplicationContextAware接口或使用@PreDestroy注解来定义Bean的销毁方法。

    3. 垃圾回收:当Bean不再被引用或被容器从容器中移除时,它将成为垃圾对象。当Java垃圾回收器运行时,它会检测到不再被引用的对象并将其回收。Spring容器会自动管理Bean的生命周期,并在合适的时机释放Bean对象的资源。

    4. 容器内存压力:当Spring容器的内存资源不足时,它可能会选择回收一些不再活跃的Bean对象。这种情况下,Spring容器会根据一定的策略来选择需要被回收的Bean对象。通常,长时间不被使用的Bean对象会被回收,以释放内存资源。

    5. 配置定义:在Spring的配置文件中,可以通过设置scope属性来控制Bean的生命周期。如果将scope属性设置为prototype,每次获取Bean时都会创建一个新的实例,当Bean不再被使用时,它将被垃圾回收。而如果将scope属性设置为singleton,Spring容器将只创建一个实例,并在容器销毁时释放它。

    总之,Spring Bean的回收时机由Spring容器来控制,通常包括Bean的生命周期结束、容器关闭、垃圾回收、内存压力和配置定义等情况。开发人员可以通过配置和相应的接口来自定义Bean的销毁逻辑。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring容器负责管理bean的生命周期,包括创建、初始化、使用和销毁。Spring容器采用垃圾回收机制来管理bean的回收,即当bean没有被引用或者被标记为可回收时,会被垃圾回收机制回收。

    下面分别从单例bean和原型bean的角度来解释bean何时被回收。

    1. 单例bean回收:
      单例bean是在容器初始化时被创建的,会一直存在于容器中,直到容器关闭。因为单例bean是全局唯一的,所以只有在容器关闭时才会被回收。

    2. 原型bean回收:
      原型bean每次被请求的时候都会创建一个新的实例,不会被容器缓存。对于原型bean的回收,需要手动进行处理。可以通过实现DisposableBean接口 或 在bean的配置文件中配置destroy-method方法来释放资源。

    此外,还有其他情况会导致bean被回收:

    • 当bean的作用域为会话作用域(session scope)或请求作用域(request scope)时,当会话或请求结束时,bean会被回收。
    • 当bean被标记为可回收时,即在bean的定义中设置了"scope"属性为"prototype",则每次使用完毕后,该bean会被标记为可回收状态,下次垃圾回收时会被销毁。
    • 当bean的生命周期结束,即完成了所有的初始化工作后,bean会被垃圾回收机制回收。可以通过实现InitializingBean接口或在bean的配置文件中配置init-method方法来进行初始化操作。

    总结起来,Spring bean的回收时间取决于作用域和配置方式。 单例bean在容器关闭时会被回收,而原型bean需要手动处理或通过标记为可回收进行释放。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部