java事件机制
java事件机制包含三个角色:
1.event object: 事件对象,用于封装需要传递的数据
2.event listener: 用于接收事件对象
3.event source: 事件源
java事件机制工作机制:
首先事件监听器需要被注册到事件源中,当事件源状态发生变化时将相应的信息包装成事件对象并发送给所有注册的监听器。监听器收到对应的事件后执行相应的处理。需要特别说明的是,事件对象中包装了事件源对象。
简单示例
启动类package com.langdashu.learn.springboot.event;
/**
* java事件机制
*
* 1.event object: 事件对象,用于封装需要传递的数据
* 2.event listener: 用于接收事件对象
* 3.event source: 事件源
*
* 工作机制:
* 首先事件监听器需要被注册到事件源中,当事件源状态发生变化时将相应的信息包装成事件对象并发送给所有注册的监听器。监听器收到对应的事件后执行相应的处理。
* 需要特别说明的是,事件对象中包装了事件源对象。
*/
public class Main{
public static void main(String[] args){
Application application = new Application();
application.register(new StartListener("ListenerA"));
application.register(new StartListener("ListenerB"));
application.start();
}
}
事件源类package com.langdashu.learn.springboot.event;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
public class Application{
private final List listeners = new ArrayList<>();
public void start(){
Logger.getGlobal().info("application start");
notifyStart();
}
public void register(StartListener listener){
listeners.add(listener);
}
public void unregister(StartListener listener){
listeners.remove(listener);
}
private void notifyStart(){
StartEvent event = new StartEvent(this, System.currentTimeMillis());
listeners.forEach(listener -> listener.onEvent(event));
}
}
事件对象类package com.langdashu.learn.springboot.event;
import java.util.EventObject;
public class StartEvent extends EventObject{
private long time;
public StartEvent(Object source, long time){
super(source);
this.time = time;
}
public long getTime(){
return time;
}
public void setTime(long time){
this.time = time;
}
}
事件监听器类package com.langdashu.learn.springboot.event;
import java.util.EventListener;
import java.util.logging.Logger;
public class StartListener implements EventListener{
private String name;
public StartListener(String name){
this.name = name;
}
public void onEvent(StartEvent event){
Logger.getGlobal().info(this.name + " receive the start time: " + event.getTime());
}
}
运行结果一月 18, 2021 11:47:25 下午 com.langdashu.learn.springboot.event.Application start
信息: application start
一月 18, 2021 11:47:25 下午 com.langdashu.learn.springboot.event.StartListener onEvent
信息: ListenerA receive the start time: 1610984845537
一月 18, 2021 11:47:25 下午 com.langdashu.learn.springboot.event.StartListener onEvent
信息: ListenerB receive the start time: 1610984845537
2021-01-18 23:47:41