在 Spring MVC 应用程序中,如果应用程序关闭然后重新启动,是否会在 WebApplicationContext 中创建一个新的 Singleton 类实例?
假设有一个单例范围的 DAO 类,其中一些成员变量(状态)在应用程序中被修改,然后应用程序被关闭。现在,当我们再次运行该应用程序时,之前的更改(在应用程序关闭之前进行的)是否仍然存在于该 DAO 中,或者当应用程序重新启动时它将是一个新的单例实例?
在 Spring MVC 应用程序中,如果应用程序关闭然后重新启动,是否会在 WebApplicationContext 中创建一个新的 Singleton 类实例?
假设有一个单例范围的 DAO 类,其中一些成员变量(状态)在应用程序中被修改,然后应用程序被关闭。现在,当我们再次运行该应用程序时,之前的更改(在应用程序关闭之前进行的)是否仍然存在于该 DAO 中,或者当应用程序重新启动时它将是一个新的单例实例?
如果它是一个 Web 应用程序,那么当服务器停止或取消部署给定的战争时,如果战争是工件,或者如果是 jar(像 Spring Boot 中的嵌入式服务器),应用程序将通过退出终止程序来关闭。这种情况下,当应用程序退出时,jvm进程也将退出,应用程序内部的spring容器也会随之退出,当spring容器不再启动时,其中包含的对象也将不可用。
因此,您将在应用重启时获得一个新实例。
新鲜的单例实例。
假设“单例”是指 bean 范围:
Singleton scoped bean在应用程序启动时由IoC容器创建,然后存储在那里。因此,无论何时注入特定类型的类,IoC 容器都会返回它创建的单个实例
Spring 应用中的IoC 容器只能根据配置元数据配置 bean (检查基于注解和基于 java 的配置)。IoC 容器由ApplicationContext类表示。
ApplicationContext 仅在应用程序存在时“存在”。当应用程序停止时,ApplicationContext 会死掉,并丢失所有 bean 及其所有变量值。
DAO模式涉及创建与数据源通信的接口(在持久层中,通过使用例如EntityManager,使用存储在 eg 中的元数据正确配置application.properties
)。如果你有一个域对象(对象,它“代表”数据库记录),它已经在应用程序内部进行了修改并且没有保存在外部某个地方(例如在数据库中),那么当应用程序停止时它就会丢失。