@EventListener注解的使用

@EventListener注解

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EventListener {
    @AliasFor("classes") Class<?>[] value() default {};

    @AliasFor("value") Class<?>[] classes() default {};

    String condition() default "";
}

用法

  1. 使用value或者classes指定需要监听的事件类型;
  2. 如果只需要监听一种类型参数,则直接在此注解标注的方法参数上写处理的事件类型参数即可;
  3. 如果该注解标注的方法的返回值不是void,则会将返回值作为事件,继续发布,如果是数组或集合则分开发布;
  4. 该注解可以配合@Order注解一块使用来指定监听方法执行的顺序
  5. condition中可以写SpEL表达式,#root.event可以引用事件对象,#root.args可以引用方法参数

@EventListener注解使用示例

@Configuration
public class ListenerConfig {

    // 如果不写classes,则会监听到 ContextRefreshedEvent、ServletWebServerInitializedEvent、ApplicationStartedEvent、ApplicationReadyEvent
    // 如下写了classes后,则只会监听到ApplicationStartedEvent事件了,后面的condition是可以使用SpEL表达式作为过滤条件的
    @EventListener/*(classes = {ApplicationStartedEvent.class},condition = "#root.event.timestamp>0")*/
    public ApplicationEvent handApplicationEvent(ApplicationStartedEvent event) {
        System.out.println("处理事件..." + event);
        return new PayloadApplicationEvent(new Object(),new Object()); // 返回值若不为null,则会继续发布该事件
    }

    @EventListener/*(classes = {ApplicationStartedEvent.class},condition = "#root.event.timestamp>0")*/
    public void handPayloadApplicationEvent(PayloadApplicationEvent event) {
        System.out.println("处理事件...2" + event);
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值