当前位置: 首页 > 知识库问答 >
问题:

春豆破坏法

应俊爽
2023-03-14

在实际应用中,destroy方法的可能示例是什么?为什么一个正在运行的应用程序想要销毁它的bean?如果bean是由spring容器(比如ContextLoaderListener)为web应用程序创建的,那么如何重新创建这些bean,因为容器已经启动了。有没有办法在不重启应用服务器的情况下重启spring IoC容器?

共有3个答案

吕宣
2023-03-14

我在Spring应用程序中看到bean直接或间接启动了非守护线程。然后,在不杀死进程的情况下停止进程变得不可能。这影响了一些处理自动化测试的Jenkins作业。所以现实世界中有很多例子,尤其是在运营模式中

姚鹤龄
2023-03-14

以下是我的观点:

在实际应用中,破坏方法的可能示例是什么?

对于大多数应用程序,我们可能主要关注真实的业务,因此我们不会经常遇到需要定义销毁方法的场景。但当你遇到一些基本组件或中间件时,你需要注意资源管理,例如数据库连接、内存使用、磁盘使用等。你必须知道如何清楚地释放不必要的资源,否则这将导致严重的问题。

如果bean是由spring容器(比如ContextLoaderListener)为web应用程序创建的,那么如何重新创建这些bean,因为容器已经启动了?

Spring Container不仅仅适用于Web应用程序,它还可以服务于普通的java应用程序(Main Application)。Spring Container有两种不同的Bean Type(单件和原型),只有当Spring Container完成启动时,单件Bean才会被预实例化,而原型Bean将通过每次调用getBean来实例化。

有没有办法在不重启应用服务器的情况下重启spring IoC容器?

Spring IoC容器开始通过调用AbstractRefreshableApplicationContext进行实例化。refresh()方法。如果您以前实例化过Spring IoC容器,那么该方法将销毁整个Spring IoC容器。因此,您可以调用此方法来重新实例化容器。如果你想了解Spring的IoC机制,我建议你阅读Spring的源代码:Spring核心、Spring bean、Spring上下文。

希望能帮助你。

刘狐若
2023-03-14

一个例子是数据源或任何需要清理的资源。你可能会遇到这样的情况:

@Bean(destroyMethod = "close")
DataSource dataSource() {
 ....
}

这在具有多个类加载器的环境中尤其重要,例如应用程序服务器,以防止内存泄漏。

有时这样做是多余的,因为基础资源可能会进行自己的清理(例如作为servlet生命周期中的ContextDestroed事件的一部分),但是您应该始终验证这一点。

这些Spring文档也是一个有用的参考。那里引用的例子类似:

<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>

然后bean类:

public class ExampleBean {

    public void cleanup() {
        // do some destruction work (like releasing pooled connections)
    }
}

可以刷新上下文。这个答案很好地解释了这一点,以及你什么时候可能想这么做。

 类似资料:
  • 我正在学习Spring框架,现在我正在学习init和callbacl方法。 我将遵循以下教程:http://www.tutorialspoint.com/spring/spring_bean_life_cycle.htm 我对本教程有一些疑问: 1) 为什么在MainApp类中,他将上下文声明为AbstractApplicationContext,但使用实现类PathXmlApplicationC

  • 这段时间我在学习Spring框架。 现在我正在研究春豆的生命周期,尤其是关于豆子的日化和破坏,阅读本教程: http://www.tutorialspoint.com/spring/spring_bean_life_cycle.htm 我已经实现了前一篇文章中提出的示例,但我对这个论点有疑问。 在这个例子中,我只有两个类:HelloWorld。java和MainApp。JAVA 在地狱世界。jav

  • 问题内容: 更新:添加Maven依赖关系 * 更新:通过添加 Maven依赖关系 解决了该错误* 美好的一天。我有AplicationContext.xml的这一部分 Maven Dep春季和冬眠 但是,当我启动我的应用程序时,它告诉我这个错误 但是我正在使用hibernate4。这是什么魔术?=)我已经尝试过重新部署应用程序,但是结果是一样的 问题答案: 您已经错过了Spring-ORM模块:

  • 我知道这个问题听起来很幼稚,但我对web应用程序中bean的范围感到困惑。我知道,对于每个请求,容器都会生成一个新线程,类似地,对于spring web应用程序,每个请求都会生成一个新线程,那么为什么建议将我的控制器、服务定义为singleton,这些bean的范围不应该是prototype吗,因为每个请求(即线程)都有其自己的控制器实例和要使用的服务。 请开导我。

  • 问题内容: 我知道Go中没有析构函数,因为从技术上讲没有类。这样,我用来执行与构造函数相同的功能。但是,有没有办法在终止的情况下创建某些东西来模仿析构函数,例如使用关闭文件?现在,我只是打电话给我,但这有点荒唐,我认为设计很差。正确的方法是什么? 问题答案: 在Go生态系统中,存在一种处理包装了宝贵(和/或外部)资源的对象的惯用语:一种专门用于释放该资源的特殊方法,通常通过该机制进行 显式 调用。

  • 问题内容: 我有一个用Restify和Mongoose在node.js中构建的REST服务,以及一个mongoDB,它的集合包含大约30.000个常规大小的文档。我的节点服务通过pmx和pm2运行。 昨天,节点突然开始通过消息“ MongoError:拓扑已被破坏”消除错误,仅此而已。我不知道这是什么意思,可能触发了什么。谷歌搜索时也没有太多发现。所以我想在这里问。 今天重新启动了节点服务后,错误