Spring中ApplicationContext的事件机制(一 )

Spring中ApplicationContext的事件机制(一 )

(残梦追月原创,转载注明)

在Windows编程中,我们常常需要处理各类事件,比如鼠标单击事件、双击事件。在Spring中, ApplicationContext也有发布和监听时间的能力。我们知道,在windows开发中,如果要响应某个事件,我们只需要编写相应windows消息的响应函数就可以了。比如鼠标单击事件,相应的消息就是WM_LBUTTONDOWN 。在Spring中也是一样,Spring中ApplicationEvent类及其子类就相当于Windows中的消息,事件监听器ApplcationListener的实现类就相当于Windows编程中的消息处理函数。

要使用Spring事件处理机制,就必须先定义一个事件(定义一个Windows消息),发布出去后,再定义一个事件监听器(编写消息处理函数),发布到容器中。这样,当该事件发生后,我们就可以在事件监听器的onApplcationEvent()方法中处理我们的事件了。

ApplicationEvent类是抽象类,不能被实例化,故Spring中的事件类都是其子类。我们要自定义一个事件就必须扩展该类,该类的代码如下:

public abstract class ApplicationEvent extends EventObject { private final long timestamp; public ApplicationEvent(Object source) { super(source); this.timestamp = System.currentTimeMillis(); } public long getTimestamp() { return timestamp; } }

如上所示,抽象类ApplicationEvent中timestamp字段存贮事件发生的时间,在该事件发生时(事件类被实例化),ApplicationEvent会自动的把当前的时间存储到该字段中,在应用中可以通过getTimestamp()方法获取该时间。如果应用要传递一个对象给监听器,那么可以把要传递的对象作为构造函数的参数source传递给ApplicationEvent类。

为了监听事件的发生并处理事件,Spring提供了一个接口ApplicationListener,代码如下:

public abstract class ApplicationEvent extends EventObject { private final long timestamp; public ApplicationEvent(Object source) { super(source); this.timestamp = System.currentTimeMillis(); } public long getTimestamp() { return timestamp; } }

当有ApplicationEvent类的子类被发布到ApplicationContext时,如果已经在上下文中部署有实现了ApplicationListener接口的Bean,那么这个Bean会得到一个通知,方法onApplicationEvent()会被调用,并将该事件的实例作为参数传入。与Windows消息处理函数不同的是,这个方法会响应所有的事件。因此在编写onApplicationEvent()方法时,应当要先判断当前的事件是否是我们要响应的事件。




By:残梦追月

你可能感兴趣的:(Spring中ApplicationContext的事件机制(一 ))