spring事件处理框架

1 Spring 事件处理框架
 

通过 ApplicationEvent 类和ApplicationListener 接口,Event 事件处理会在ApplicationContext 中进行。如果一个bean 实现了ApplicationListener 接口,当ApplicationEvent 被ApplicationContext 发布时,这个bean 就会被通知。这在本质上相当于标准的观察者模式。

 

ApplicationContext 通过方法publishEvent() 来发布事件,该方法的参数是继承了ApplicationEvent 的事件定义类的实例。所有的监听者都会同步的接收到发布的事件,这意味着当publishEvent ()调用时程序会阻塞,直到所有的监听者都处理完毕(也可能通过实现ApplicationEventMulticaster 来提供一个交替的事件发布策略,Spring 的 SimpleApplicationEventMulticaster 是他的一个实现,内部使用 TaskExecutor 以多线程的方式异步调用事件监听 )。如果有事物上下文,监听者的事务会处在发布者的事物当中。

 

 

以下是一个实例:

事件定义类

public abstract class BlackListEvent extends ApplicationEvent {

        public BlackListEvent(Object source) {

           super (source);

        }       

public final Black get Black () {

           return ( Black )getSource();

        }

 

}

事件发布类:

public class EmailBean implements ApplicationContextAware {

private List blackList;

private ApplicationContext ctx;

public void setBlackList(List blackList) {

this.blackList = blackList;

}

public void setApplicationContext(ApplicationContext ctx) {

this.ctx = ctx;

}

public void sendEmail(String address, String text) {

if (blackList.contains(address)) {

Black black=new Black(address, text);

                      BlackListEvent event = new BlackListEvent(black);

                      ctx.publishEvent(event);

     }

// send email...

}

}

事件监听类:

public class BlackListNotifier implements ApplicationListener {

private String notificationAddress;

public void setNotificationAddress(String notificationAddress) {

this.notificationAddress = notificationAddress;

}

public void onApplicationEvent(ApplicationEvent event) {

if (event instanceof BlackListEvent) {

// notify appropriate person...

}

}

}

 

bean 配置文件:

<bean id="emailer" class="example.EmailBean">

<property name="blackList">

<list>

<value>black@list.org</value>

<value>white@list.org</value>

<value>john@doe.org</value>

</list>

</property>

</bean>

<bean id="blackListListener" class="example.BlackListNotifier">

<property name="notificationAddress" value="spam@list.org"/>

</bean>

 

2 后续问题
   Aop 替代:与 aop 实现方式的比较。(减小耦合)

  同步事件:可以处理 before , after 等事件。( spring 为同步)

   异步事件:事件异步处理框架 , 考虑事务问题。

   事件监听管理:集中管理还是分散管理(不同的设计方式)

                 集中管理优点:方便查找事件监听,利于维护

                 分散管理: 更高程度上解耦

文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/3_program/java/javajs/20100719/453675.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值