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()方法来主动触发容器事件。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值