java – 从未抛出ApplicationContext事件
我正在尝试在所有ContextXXXEvent上使用ContextEventListener
ContextRefreshedEvent和ContextClosedEvent都被捕获,他们的侦听器完成了预期的工作. 我试图对ContextStartedEvent和ContextClosedEvent做同样的事情但是没有抓住这两个事件监听器. 打印了event.getSource(在刷新和关闭的事件中):
(开始和停止)和(刷新和关闭)之间有什么区别吗? 是因为我的应用程序上下文是WebApplicationContext(因为event.getSource()显示?) 最佳答案
我已经通过了弹簧代码.我将讨论ContextStartedEvent.可以对停止的事件给出类似的解释.
说明: ContextStartedEvent仅从AbstractApplicationContext的start()方法发出,无处可寻.由于您无法捕获ContextStartedEvent,如果我们可以知道谁调用或不调用此方法,我们可以找到答案. 在spring中,applicationContext可以通过两种方式启动.一,我们明确地调用此方法start(),它将触发上下文中bean的初始化以及上下文初始化的其余部分.另一种方式是春天来处理上下文初始化.换句话说,我们不处理上下文启动和停止这种方式.我们几乎所有人都在不知不觉中使用了第二种初始化方式.例如,您必须使用xml文件来加载使用ClassPathXmlApplicationContext的bean定义.这是从AbstractRefreshableApplicationContext继承的. 因此,我认为仅当您手动启动和停止(管理)ApplicationContext时才会发出ContextStartedEvent和ContextStoppedEvent.还有另一组ApplicationContext实现,您可以使用它们自己管理ApplicationContext.我个人没试过.如果我能成功做到这一点,我会更新答案. 可以对ContextStoppedEvent给出类似的解释. 更新:这与spring文档中提供的事件的定义一致(以及@coolgirl对此问题的其他答案) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |