java – 从未抛出ApplicationContext事件

前端之家收集整理的这篇文章主要介绍了java – 从未抛出ApplicationContext事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试在所有ContextXXXEvent上使用ContextEventListener
我为每个事件类型创建了一个监听器,如下所示(ContextRefreshedEvent是一个示例):

@Component
public class MyApplicationRefreshedListener implements ApplicationListener

ContextRefreshedEvent和ContextClosedEvent都被捕获,他们的侦听器完成了预期的工作.

我试图对ContextStartedEvent和ContextClosedEvent做同样的事情但是没有抓住这两个事件监听器.

打印了event.getSource(在刷新和关闭的事件中):

Event source [Root WebApplicationContext: startup date [Tue May 09 10:07:51 IDT 2017]; root of context hierarchy]

(开始和停止)和(刷新和关闭)之间有什么区别吗?

是因为我的应用程序上下文是WebApplicationContext(因为event.getSource()显示?)

最佳答案
我已经通过了弹簧代码.我将讨论ContextStartedEvent.可以对停止的事件给出类似的解释.

说明:

ContextStartedEvent仅从AbstractApplicationContext的start()方法发出,无处可寻.由于您无法捕获ContextStartedEvent,如果我们可以知道谁调用或不调用方法,我们可以找到答案.

在spring中,applicationContext可以通过两种方式启动.一,我们明确地调用方法start(),它将触发上下文中bean的初始化以及上下文初始化的其余部分.另一种方式是春天来处理上下文初始化.换句话说,我们不处理上下文启动和停止这种方式.我们几乎所有人都在不知不觉中使用了第二种初始化方式.例如,您必须使用xml文件来加载使用ClassPathXmlApplicationContext的bean定义.这是从AbstractRefreshableApplicationContext继承的.

因此,我认为仅当您手动启动和停止(管理)ApplicationContext时才会发出ContextStartedEvent和ContextStoppedEvent.还有另一组ApplicationContext实现,您可以使用它们自己管理ApplicationContext.我个人没试过.如果我能成功做到这一点,我会更新答案.

可以对ContextStoppedEvent给出类似的解释.

更新:这与spring文档中提供的事件的定义一致(以及@coolgirl对此问题的其他答案)

原文链接:https://www.f2er.com/spring/432256.html

猜你在找的Spring相关文章