spring的事件监听机制的简化实现
2018-03-19 20:57
453 查看
import java.util.EventListener; import java.util.EventObject; import java.util.LinkedHashSet; import java.util.Set; /** * spring的事件模式 */ public class SpringListener{ public static void main(String args[]){ ApplicationContext appliactionContext = new ApplicationContext(); //添加监听是AbstractApplicationContext在refresh()方法内调用registerListeners(); appliactionContext.addApplicationListener(new ApplicationListener(){ @Override public void onApplicationEvent(ApplicationContextEvent event) { if(event instanceof ContextClosedEvent){ System.out.println("容器关闭了"); //...从事件拿到事件源干活 }else if(event instanceof ContextStartedEvent){ System.out.println("容器启动了"); //...从事件拿到事件源干活 } } }); appliactionContext.start(); appliactionContext.stop(); } } //事件发布接口 interface ApplicationEventPublisher { void publishEvent(ApplicationContextEvent event); } //事件源 class ApplicationContext implements ApplicationEventPublisher{ private Set<ApplicationListener<?>> applicationListeners = new LinkedHashSet<ApplicationListener<?>>(); void addApplicationListener(ApplicationListener listener) { this.applicationListeners.add(listener); } @Override public void publishEvent(ApplicationContextEvent event) { //监听器的集合处理事件 for (ApplicationListener<?> applicationListener : applicationListeners) { applicationListener.onApplicationEvent(event); } } //启动动作,调用发布事件,并传入启动的事件 public void start() { publishEvent(new ContextStartedEvent(this)); //this即是本类即是事件源 } //关闭动作, 调用发布事件,并传入关闭的事件 public void stop() { publishEvent(new ContextClosedEvent(this)); } } //事件监听器 interface ApplicationListener<E extends ApplicationContextEvent> extends EventListener { void onApplicationEvent(ApplicationContextEvent event); } //事件的抽象类 abstract class ApplicationContextEvent extends EventObject { private static final long serialVersionUID = 7099057708183571937L; public ApplicationContextEvent(Object source) { super(source); } } //容器关闭的事件 class ContextClosedEvent extends ApplicationContextEvent { public ContextClosedEvent(ApplicationContext source) { super(source); } } //容器启动的事件 class ContextStartedEvent extends ApplicationContextEvent { public ContextStartedEvent(ApplicationContext source) { super(source); } }
相关文章推荐
- Spring架构揭秘-事件监听机制
- Spring中的IOC(四):IOC中其他接口的使用及Spring的事件处理机制(监听机制)
- java实现简单的窗体和密码验证(传参,事件机制和事件监听的作用过程)
- Spring架构揭秘-事件监听机制
- Unity3d基于订阅者模式实现事件机制_解决装箱拆箱问题和注册的监听事件单一问题
- springboot 中事件监听模式的一种实现
- 【spring源码学习】spring的事件发布监听机制源码解析
- Spring内部的事件监听实现
- 使用Spring事件机制实现异步的方法
- Spring 中的事件监听的实现
- 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用
- 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用
- 【Java系列】(五)java实现简单的窗体和密码验证(传参,事件机制和事件监听)
- java事件监听机制,spring中的event listener模式和解耦
- 事件处理程序实现的另一种方法:浏览器的事件监听机制实现“1事件对应n事件处理程序”(Javascript)
- 使用spring事件驱动机制,实现权限信息的自动收集存库
- Spring中的事件监听机制在项目中的应用
- 使用spring事件驱动机制,实现权限信息的自动收集存库
- java基础学习总结——关于Java中事件分发和监听机制实现的代码实例
- 基于监听的事件处理机制-----五种onClickListener实现方法