直接上代码看用法:
import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; /** * spring启动监听器类 * @author zhaoxing * @version Id: ListenerBusiness.java, v 0.1 2017/4/27 15:13 zhaoxing Exp $$ */ @Slf4j @Component public class ListenerBusiness implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplicationEvent(ContextRefreshedEvent evt) { /** * 在web项目中(spring mvc),系统会存在两个容器,一个是root application context , * 另一个就是我们自己的 projectName-servlet context(作为root application context的子容器)。 * 这种情况下,就会造成onApplicationEvent方法被执行两次。为了避免这种问题, * 我们可以只在root application context初始化完成后调用逻辑代码,其他的容器的初始化完成,则不做任何处理 */ if (evt.getApplicationContext().getParent() == null) { doBusiness(); } } public void doBusiness(){ log.info("启动监听类开始启动。。。。"); // do other business } }
其中 ApplicationListener<E extends ApplicationEvent> 是spring框架中用来实现的监听器接口,泛型中指定监听器监听的事件。接口中只有一个接口方法,用来供接口实现类在监听到对应事件后执行业务逻辑处理方法。
相应源码如下:
/** * spring框架中一个用来实现的事件监听器,基于标准 java.util.EventListener接口(观察者设计模式) * * @param <E> 监听的事件类型,是 ApplicationEvent的子类 */ public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { /** * 监听到特定事件后要执行的业务处理方法. * @param event the event to respond to */ void onApplicationEvent(E event); } /** * 当应用启动或者刷新时(gets initialized or refreshed )触发该事件. */ public class ContextRefreshedEvent extends ApplicationContextEvent {
相关推荐
在使用Spring事件机制实现异步的方法时,通常需要将事件监听器添加到ApplicationContext中。在上面的代码中,使用@SpringBootApplication的addListeners方法将MyListener添加到ApplicationContext中。 使用@Event...
本篇文章将详细介绍Spring事件监听的三种方式:基于接口的监听器、基于类的监听器以及基于注解的监听器。 ### 1. 基于接口的监听器(ApplicationListener) **接口定义:** Spring提供了`ApplicationListener`接口...
在`SimpleApplicationEventMulticaster`中,`multicastEvent`方法会遍历所有监听器,根据监听器的类型和事件类型进行匹配,然后调用对应的处理方法。 为了实现事件监听,我们还可以自定义`ApplicationListener`实现...
首先,事件(ApplicationEvent)是Spring框架中事件的核心。Spring内置了一些预定义的事件类型,如ContextRefreshedEvent、ContextStartedEvent、ContextStoppedEvent和ContextClosedEvent,它们分别对应于Spring...
- 使用`@WebListener`注解标注监听器类,以确保监听器可以被Spring boot自动检测并使用。 - 如果是在传统的Java Web应用中,则需要在web.xml文件中配置监听器,如文件内容所示,使用`<listener>`标签指定监听器类的...
在Spring Boot中,监听器是用来响应特定事件的组件,例如Web应用程序的启动和关闭。`MyListener`类实现了`ServletContextListener`接口,这个接口有两个主要方法:`contextInitialized`和`contextDestroyed`。当Web...
监听器将接收到`ApplicationEvent`的实例,并在其`onApplicationEvent`方法中处理事件。 ```java @Component public class CustomEventListener implements ApplicationListener<CustomEvent> { @Override public...
然后,你需要定义一个监听器接口,该接口通常会包含一个方法来处理特定的事件。这个接口可以使用`ApplicationListener`接口或者自定义的监听器接口,如下所示: ```java public interface CustomEventListener { ...
事件源是触发事件的组件,可以通过`ApplicationEvent`的构造函数传入,并在`ApplicationEvent`的`getSource()`方法中获取。 8. **非Spring管理组件的监听** 即使某个组件不是由Spring管理的,也可以通过`...
通过示例代码,我们将展示如何使用Spring监听器和定时任务来实现批处理任务的执行。 Spring监听器 在Spring框架中,监听器是指实现ServletContextListener接口的类,用于监听ServletContext的生命周期事件。监听器...
Spring监听器是Spring框架中的一个重要组成部分,主要用于监听和响应应用上下文或Bean的生命周期事件。在Spring中,监听器是通过实现特定接口或者继承抽象类来定义的,这些接口包括ApplicationContextAware、...
【Spring在Web项目中的应用】 ...同时,通过监听器`ContextLoaderListener`,可以在Web容器启动时自动加载Spring配置,确保在整个Web应用程序生命周期中,Service层和其他Spring管理的bean都可以正确地被创建和管理。
除了事件本身,`ApplicationEvent`还有一个`ApplicationContext`的引用,称为事件上下文,可以在事件处理方法中获取到。这在需要访问其他bean或者共享信息时非常有用。 7. **局部事件(Local Events)** 从Spring...
本文详细地介绍了Spring ApplicationListener监听器的用法,包括如何实现监听器、如何将监听器加入到Spring容器中、如何在Spring容器中发布事件等内容,对大家的学习或者工作具有一定的参考学习价值。
Spring默认使用`SimpleApplicationEventMulticaster`,它维护了一个监听器列表,当`multicastEvent`方法被调用时,会遍历列表并调用每个监听器的`onApplicationEvent`方法。 3. `ApplicationContext`:它是Spring的...
在Spring框架中,事件处理是一种重要的组件间通信方式。它允许一个对象在完成特定操作后,...通过创建自定义事件、发布事件、实现或注解监听器,我们可以有效地在系统组件之间传递信息,提升代码的可读性和可维护性。
首先,Spring监听器是基于事件驱动模型的,这种模式在多线程和分布式系统中非常常见。在Spring中,当一个特定的事件发生时,如bean的初始化或销毁,上下文的启动或关闭等,Spring会通过发布事件(publishEvent)来...
在Spring项目中,监听器(Listener)扮演着关键的角色,特别是在Web应用程序的上下文管理方面。本文将深入探讨Spring框架中的监听器,特别是`ContextLoaderListener`的作用及其配置。 `ContextLoaderListener`是...