15、Spring事件机制_观察者模式

1、ApplicationContext的事件机制是使用标准的观察者模式实现。通过ApplicationEvent(被观察者)类和ApplicationListener(观察者)接口实现。

ApplicationEvent:容器事件,必须由ApplicationContext发布;

ApplicationListener:监听器,可有容器中任何的Bean担任;

实际上,Spring的时间机制和所有的时间机制都基本相似,他们都需要事件源、事件和事件监听器组成。只是此处的事件源是ApplicationContext,且事件必须由Java程序显示触发。

2、写一个事件例子:

容器事件:

/**
 * 被观察者
 */
public class MyTestEvent extends ApplicationEvent {

 private static final long serialVersionUID = 1L;
 private String id;
 private String name;
 public MyTestEvent(Object source) {
  super(source);
 }
 public MyTestEvent(Object source, String id, String name) {
  super(source);
  this.id = id;
  this.name = name;
 }
 
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }

}

监听器:

/**
 * 观察者
 * @author Administrator
 */
public class MyTestListner implements ApplicationListener<ApplicationEvent> {

 public void onApplicationEvent(ApplicationEvent arg0) {
  if(arg0 instanceof MyTestEvent){
   MyTestEvent event = (MyTestEvent)arg0;
   System.out.println(event.getId());
  }else{
   
  }
 }
}

Java程序显示触发:

public static void main(String[] args) {
  ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-base.xml");
  MyTestEvent ev = new MyTestEvent("hello", "001", "maomao");
  ctx.publishEvent(ev);
 }

spring-base.xml监听配置:

<bean class="com.event.MyTestListner"></bean>

3、总结

当系统创建spring容器,加载spring容器时会自动触发容器事件,容器事件监听器可一件听到这些事件。除此之外,程序也可以调用ApplicationContext的publishEvent()方法来主动触发容器事件。


阅读更多
换一批

没有更多推荐了,返回首页