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
    评论
Spring框架中,异常处理是一个非常重要的方面,可以帮助我们更好地处理应用程序中的异常情况。Spring框架提供了多种方式来处理异常,下面是一些常用的方法: 1. 使用 @ExceptionHandler 注解:可以在控制器类中定义一个或多个带有 @ExceptionHandler 注解的方法来处理特定类型的异常。当控制器方法抛出指定类型的异常时,Spring会自动调用对应的异常处理方法。 2. 使用 @ControllerAdvice 注解:可以使用 @ControllerAdvice 注解来定义一个全局的异常处理类,该类可以处理整个应用程序中的异常。在该类中,可以使用 @ExceptionHandler 注解来定义具体的异常处理方法。 3. 使用 @ResponseStatus 注解:可以在控制器方法上使用 @ResponseStatus 注解来指定特定的HTTP状态码。当控制器方法抛出异常时,Spring会根据注解中指定的状态码返回响应。 4. 使用 @ControllerAdvice + @ExceptionHandler + ResponseEntity:可以在全局异常处理类中使用 ResponseEntity 来自定义异常响应。通过在异常处理方法中构建 ResponseEntity 对象,可以灵活地设置响应状态码、消息体等信息。 5. 使用 @ControllerAdvice + @ExceptionHandler + ModelAndView:可以在全局异常处理类中使用 ModelAndView 来返回错误页面。通过在异常处理方法中构建 ModelAndView 对象,可以指定要返回的视图名称和模型数据。 以上是一些常用的异常处理方法,根据实际需求选择合适的方式来处理异常。同时,还可以结合其他Spring框架提供的功能,如统一日志记录、全局异常处理器等,来完善异常处理机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值