Spring 事件(2)- 自定义事件


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();
  }
}

原文地址:https://www.cnblogs.com/jinbuqi/p/10987732.html

时间: 2024-07-30 22:27:22

Spring 事件(2)- 自定义事件的相关文章

jQuery基础(鼠标事件,表单事件,键盘事件,自定义事件 篇)

1.jQuery鼠标事件之click与dbclick事件 方法一:$ele.click()(不带参数) <div id="test">点击触发<div> $("ele").click(function(){ alert('触发指定事件') }) $("#test").click(function(){ $("ele").click() //手动指定触发事件 });   方法二:$ele.click( h

Dom3级事件下自定义事件

原文出处:  http://www.w3cfuns.com/notes/11861/e21736a0b15bceca0dc7f76d77c2fb5a.html . 我拿出作者中的一段,感谢作者原创. DOM中的事件模拟(自定义事件): DOM3级还定义了自定义事件,自定义事件不是由DOM原生触发的,它的目的是让开发人员创建自己的事件.要创建的自定义事件可以由createEvent("CustomEvent"); 返回的对象有一个initCustomEvent()方法接收如下四个参数.

jQuery-3.事件篇---自定义事件

jQuery自定义事件之trigger事件 众所周知类似于mousedown.click.keydown等等这类型的事件都是浏览器提供的,通俗叫原生事件,这类型的事件是需要有交互行为才能被触发. 在jQuery通过on方法绑定一个原生事件 $('#elem').on('click', function() { alert("触发系统事件") }); alert需要执行的条件:必须有用户点击才可以.如果不同用户交互是否能在某一时刻自动触发该事件呢? 正常来说是不可以的,但是jQuery解

js事件、自定义dom事件、自定义事件

本文参考资料是:高级编程语言第三版(13章事件和22章自定义事件). 本文涉及到: 事件的组成元素. 事件优化. 模拟事件. 自定义事件的内容 js事件是什么?高级程序13章第一句话说:js与html之间的交互是通过事件实现的.事件是浏览器或者用户自身执行的某种动作,例如我们最常用到的点击事件. 1:js事件 事件流 事件处理程序 事件对象 事件类型 事件流:从页面上接收事件的顺序 事件冒泡:概念事件从最具体的元素接收事件,然后逐级向上传播到较为不具体的元素.这个概念是由ie提出. <!DOCT

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

1. Spring内置的事件有哪些? Spring中的事件是一个 ApplicationEvent类的子类,由实现 ApplicationEventPublisherAware 接口的类发送,实现 ApplicationListener 接口的类监听. Spring中已经定义了一组内置事件,这些事件由ApplicationContext容器发出.(ContextRefreshedEvent.ContextStartedEvent.ContextStoppedEvent.ContextClosed

Spring(十)之自定义事件

编写自定义事件的简单流程如下: (1)编写CustomEvent.java package com.tutorialspoint; import org.springframework.context.ApplicationEvent; public class CustomEvent extends ApplicationEvent{ public CustomEvent(Object source) { super(source); } public String toString(){ r

js中事件(自定义事件)

今天闲的蛋疼,我们来聊一聊web前端中的事件机制和自定义事件.灵感来自jQuery,在此感谢jQuery作者. 首先,最开始. <button id="button" type="button" onclick="alert('hello')">你好</button> 这是我们在使用html写页面的时候最原生的事件触发方式.上面那行代码会生成一个按钮,当我们点击这个按钮的时候就会弹出一个原生的弹窗,内容是hello. 随着

js原生创建模拟事件和自定义事件的方法

让我万万没想到的是,原来<JavaScript高级程序设计(第3版)>里面提到的方法已经是过时的了.后来我查看了MDN,才找到了最新的方法. 1. 模拟鼠标事件 MDN上已经说得很清楚,尽管为了保持向后兼容MouseEvent.initMouseEvent()仍然可用,但是呢,我们应该使用MouseEvent().我们使用如下页面做测试 1 <!DOCTYPE html> 2 <html> 3 <head lang="zh-CN"> 4

Angular4.x Event (DOM事件和自定义事件)

Angular组件和DOM元素通过事件与外部进行通信,两者中的事件绑定语法是相同的-(eventName)="expression": <button (click)="onClick()">Click</button> DOM元素 DOM 元素触发的一些事件通过 DOM 层级结构传播,事件首先由最内层的元素开始,然后传播到外部元素,直到它们到根元素,这种传播过程称为事件冒泡. DOM事件冒泡与Angular可以无缝工作,具体示例如下: im

jQuery事件之自定义事件

其实事件的bind和unbind,都是为了自定义事件做准备. 语法: $(selector).trigger(type, data); 作用:在每一个匹配的元素上触发某类事件,它触发的是由bind()注册的自定义事件. 参数解释: type(string):要采用护法的事件类型 data(Array): 可选参数, 传递给事件处理函数的附加参数 示例: 给一个按钮添加自定义的事件 $("button").bind("myClick", function(ev, a,