Spring 事件- 自定义事件

Posted jinbuqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 事件- 自定义事件相关的知识,希望对你有一定的参考价值。


Spring 系列教程


除了内置事件,Spring中也可以使用自定义事件。

怎样使用自定义事件:

  • 创建事件类 - 扩展ApplicationEvent类,创建事件类。
  • 创建发送类 - 发送类获取ApplicationEventPublisher实例发送事件。
  • 创建监听类 - 实现ApplicationListener接口,创建监听类。

事件类

事件类用于存储事件数据。下面创建一个简单的事件类。

CustomEvent.java

import org.springframework.context.ApplicationEvent;

public class CustomEvent extends ApplicationEvent 
 
    public CustomEvent(Object source, String message) 
        super(source);
    
    
    public String toString() 
        return "我是自定义事件";
    

发送类

发送类创建事件对象并发送。

要发送事件,这里介绍2种方法:

  1. 使用@autowired注解注入ApplicationEventPublisher实例。

CustomEventPublisher.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;

public class CustomEventPublisher 

  @Autowired
  private ApplicationEventPublisher publisher;
  
  public void publish() 
    CustomEvent event = new CustomEvent(this);
    publisher.publishEvent(event);
  
  1. 发送类实现ApplicationEventPublisherAware接口,获取ApplicationEventPublisher实例。

CustomEventPublisher.java

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;

public class CustomEventPublisher implements ApplicationEventPublisherAware 

  private ApplicationEventPublisher publisher;
  
  // 必须重写这个方法获取ApplicationEventPublisher
  public void setApplicationEventPublisher (ApplicationEventPublisher publisher)
    this.publisher = publisher;
  
  
  public void publish() 
    CustomEvent event = new CustomEvent(this);
    publisher.publishEvent(event);
  

如果发送类实现了ApplicationEventPublisherAware接口,发送类必须声明为bean,Spring容器将其标识为事件发送者。

<bean id="customEventPublisher" class="CustomEventPublisher"/>

监听类

监听类监听事件。监听类必须实现ApplicationListener接口,并且被定义为Bean以便Spring容器可以加载它。

beans.xml

<bean id="customEventHandler" class="CustomEventHandler"/>

CustomEventHandler.java

import org.springframework.context.ApplicationListener;

public class CustomEventHandler implements ApplicationListener<CustomEvent>  
  public void onApplicationEvent(CustomEvent event) 
    System.out.println("收到事件:" + event.toString());
  

运行

测试自定义事件。

Test.java

import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test 
  public static void main(String[] args) 
    ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
    
    CustomEventPublisher publisher = (CustomEventPublisher) context.getBean("customEventPublisher");
    publisher.publish();
  

以上是关于Spring 事件- 自定义事件的主要内容,如果未能解决你的问题,请参考以下文章

Spring标准事件和自定义事件-观察者模式

Spring标准事件和自定义事件-观察者模式

Spring标准事件和自定义事件-观察者模式

Spring内置事件以及自定义事件

Spring-自定义事件发布

Spring 事件- 自定义事件