gpt4 book ai didi

java - Spring Singleton Scope 是如何进行垃圾回收的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:49 24 4
gpt4 key购买 nike

我是 Spring 框架的新手。我一直对 Spring 中单例的概念和它的垃圾收集感到困惑。我已经阅读了很多问题和文章来回答我的问题,Spring Singleton 范围是如何被垃圾收集的。我只得到了关于原型(prototype)作用域垃圾回收的答案,但关于单例作用域的文章对我来说并不清楚。有人可以提供有关此问题的详细信息。

最佳答案

在 Spring 中,您编写的大部分类都是单例类。这意味着这些类只会创建一个实例。这些类在 Spring 容器启动时创建,并在 Spring 容器停止时销毁。

Spring 单例对象与简单的 Java 对象不同的原因是容器维护了对它们的引用,并且它们可以在代码中的任何地方随时使用。

我会给你一个使用 Spring 容器的例子来说明我的意思。在编写 Spring 应用程序时,这不是通常应该如何执行此操作,这只是一个示例。

@Component
public class ExampleClass implements ApplicationContextAware {
/*
* The ApplicationContextAware interface is a special interface that allows
* a class to hook into Spring's Application Context. It should not be used all
* over the place, because Spring provides better ways to get at your beans
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
MyBean bean = applicationContext.getBean("MyBean");
}
}

上面的代码对 Spring 说“我想要你在容器启动时发现的 MyBean 实例”(Classpath Scanning)。 Spring 应该已经创建了此类的(代理)实例并可供您使用。

来自Spring Documentation

The Spring IoC container creates exactly one instance of the object defined by that bean definition. This single instance is stored in a cache of such singleton beans, and all subsequent requests and references for that named bean return the cached object.

因为该 bean 已缓存在应用程序上下文中,所以在销毁应用程序上下文之前,它永远不会符合垃圾回收条件。

关于java - Spring Singleton Scope 是如何进行垃圾回收的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37605010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com