本文简要介绍了Spring事件监控机制。
(事件监听)
概述 ApplicationContext
事件处理是通过的ApplicationEvent
类和ApplicationListener
提供接口。如果将实现这一点。 ApplicationListener
接口的 bean
在上下文中部署,所以每当 ApplicationEvent
发布到 ApplicationContext
时间,会通知这个 bean
。本质上,这是一种标准的观察者设计模式。
Spring 的 ApplicationContext
容器内的所有事件类型都是从继承的org.springframework.context.ApplicationEvent
,容器中的所有监听器都实现了org.springframework.context.ApplicationListener
接口,以及bean
在容器中注册。一旦在容器中发布 ApplicationEvent
及其子类型事件,注册为容器 ApplicationListener
将处理这些事件。
提示: 从 Spring 4.2 一开始,事件基础设施得到了显著改善,并提供了基于注释和发布任何事件的模型(即不一定是从
ApplicationEvent
扩展对象)的能力。当这样的对象被发布时,我们将为您包装在事件中。
Spring 标准事件:
ApplicationContext
时间发布(例如通过ConfigurableApplicationContext
接口使用 refresh()
方法)。在这里,“初始化”意味着加载所有bean、检测和激活后处理器bean、预实例化单例和ApplicationContext
对象已经可以使用了。只要上下文没有关闭,就可以多次触发刷新,前提是选择了ApplicationContext
实际上支持这种“热”刷新。例如XmlWebApplicationContext
但是,支持热刷新 GenericApplicationContext
不支持。使用contextstartedevent。ConfigurableApplicationContext
接口上的start()
方法 启动ApplicationContext
不时发布。在这里,“started意味着所有的Lifecyclele bean 都收到显式启动信号。通常,该信号用于在显式停止后重新启动 Bean,但也可用于启动尚未配置为自动启动的组件(如初始化时尚未启动的组件)。Contextstopedevent使用ConfigurableApplicationContext
接口上的 stop()
方法 停止 ApplicationContext
不时发布。在这里,“stopped意味着所有的Lifecyclele bean 都收到了显式停止信号。停止的上下文可以通过 调用start()重新启动。ContextClosedevent用于使用。ConfigurableApplicationContext
接口上的 close()
方法或通过 JVM shutdown
挂钩关闭 ApplicationContext
时发布。这里,“closed所有单例都意味着 bean 将被销毁。上下文一旦关闭,就会达到生命周期的终点,无法刷新或重新启动。Requesthandledevent是特定的 Web 通知所有事件 Bean 已处理 HTTP 请求。该事件在请求完成后发布。该事件仅适用于使用 Spring 的DispatcherServlet
的web ServletRequestHandledEventRequestHandledEvent
用于添加特定于特定于添加的子类Servlet
上下文信息。Spring事件机制涉及以下四个重要类别:
ApplicationEvent:抽象类是所有Spring事件的父类。
ApplicationListener:基于标准java的EventListener接口,实现了事件监听器的所有事件监听器接口。
ApplicationEventMulticaster:事件经理,管理监听器和发布事件,Applicationcontext通过委托Applicationeventmulticaster来访 发布事件。
ApplicationEventPublisher:该界面包装了与事件相关的公共方法,也受到了委托 Applicationeventmulticaster完成事件发布。
如果你喜欢,欢迎
![]()