首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

@EventListener带有非void返回值的注释方法不会触发新事件

@EventListener是Spring框架中的一个注解,用于标识一个方法作为事件监听器。当触发对应的事件时,被@EventListener注解标注的方法会被自动调用。

对于带有非void返回值的注释方法,不会触发新事件。这是因为Spring框架在处理事件监听器时,只会关注方法的执行结果是否为void类型。如果方法返回了非void类型的结果,Spring框架会忽略该结果,并不会触发新的事件。

这种设计可以避免事件监听器的返回结果对整个事件处理流程产生影响。如果事件监听器的返回结果会触发新的事件,可能会导致事件处理流程陷入循环,造成系统性能下降或其他问题。

在实际应用中,如果需要在事件监听器中返回结果并触发新的事件,可以考虑将返回结果作为参数传递给其他方法或组件进行处理,而不是直接在事件监听器中触发新事件。

腾讯云相关产品和产品介绍链接地址:

  • 云函数(Serverless):https://cloud.tencent.com/product/scf
  • 云消息队列(CMQ):https://cloud.tencent.com/product/cmq
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 云虚拟主机(CVM):https://cloud.tencent.com/product/cvm
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动推送服务(信鸽):https://cloud.tencent.com/product/tpns
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云游戏引擎(GSE):https://cloud.tencent.com/product/gse

请注意,以上仅为腾讯云的一些相关产品,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring源码浅析——事件和异步事件

()方法触发自定义事件MyEvent,并将事件传递给相应监听器MyEventListener进行处理。...2.1 初始化事件广播 在Spring中,初始化事件广播是通过ApplicationContext接口refresh()方法触发。...具体来说,它会遍历所有BeanDefinition,检查是否存在带有@EventListener注解方法,如果存在,则将其封装成ApplicationListenerAdapter对象,并将其注册到事件派发器中...这些代码中包含了以下两个逻辑: 扫描所有Bean对象,将带有@EventListener注解方法注册为事件监听器 在Spring框架中,可以通过在Bean对象方法上标记@EventListener注解来定义事件监听器...()方法中,会遍历所有的BeanDefinition,检查是否存在带有@EventListener注解方法,并将其添加到事件监听器工厂列表中。

24010

spring事件监听应用场景_java监听器原理与实现

() 方法完成事件机制相关组件同样也离不开容器,因此事件系统初始化也通过该方法完成。...不过在如果上下文中存在“早期事件”,则会触发广播,此时调用 ApplicationEventMulticaster.multicastEvent() 将会提前触发广播器中那些监听器初始化,否则按正常情况这些将等到上下文主动初始化...// 将bean中带有@EventListener注解方法转为ApplicationListener ApplicationListener<?...try { // 查找直接或间接带有@EventListener注解方法 annotatedMethods = MethodIntrospector.selectMethods...: 检查 BeanFactory 中所有的 Bean,筛选出其中有成员方法直接或间接带有 @EventListener 注解 Bean; 将此类 Bean 方法通过 EventListenerFactory

84210

DDD落地之事件驱动模型

不会! 那为什么要改呢? 原因是,业务需求在不断迭代过程中,与当前业务强相关主流程业务,随时都有可能被替换或者升级。...双11大促,用户下单同时需要给每个用户赠送几个小礼品,那你又要写一个函数了,拼接在主方法后面。双11结束,这段要代码要被注释。有一年大促,赠送东西改变,代码又要加回来。。。。...来来回回,订单逻辑变得又臭又长,注释代码逻辑很多还不好阅读与理解。 如果用了事件驱动模型,那么当第一步创建订单成功之后,发布一个创建订单成功领域事件。...亦或是,如果主流程执行出错了,那么我们需要触发一个事件,发送钉钉消息到群里进行线上业务监控,需要在主方法逻辑中抛出异常再调用此事件。...再回过头去看一下@TransactionalEventListener,默认配置是在事务提交后才进行事件执行,但是这里事务都没有,自然也就不会触发事件了。

91830

【小家Spring】从Spring中(ApplicationEvent)事件驱动机制出发,聊聊【观察者模式】【监听者模式】【发布订阅模式】【消息队列MQ】【EventSourcing】...

如果它返回值不为null,那么它可以行使事件链,可以继续发布事件 // 把返回值当作事件继续publish(返回值可以是个Object,最终被包装成payload事件~~~~) if...()方法; //如果是用@EventListener注释,则调用ApplicationListenerMethodAdapter中onApplicationEvent()方法 listener.onApplicationEvent...若监听方法返回值,那将会把这个返回值当作事件源,一直发送下去,直到返回void或者null停止 @EventListener(value = {ContextRefreshedEvent.class...,其实还处于Boot容器流程内部,所以此时@EventListener肯定是没有注册上,因此此方法代表监听器就不会生效了。...显然EventListenerMethodProcessor因为是Lazy加载,所以目前还仅仅是Bean定义信息,所以就不会检测@EventListener方法,因此它就不生效了 这是一个坑,当然一般情况下我们不会这么做

6.4K61

谈谈SpringBoot 事件机制

要“监听”事件,我们总是可以将“监听器”作为事件源中另一个方法写入事件,但这将使事件源与监听器逻辑紧密耦合。 对于实际事件,我们比直接方法调用更灵活。...---- 为什么我应该使用事件而不是直接方法调用? 事件和直接方法调用都适合于不同情况。使用方法调用,就像断言一样-无论发送和接收模块状态如何,他们都需要知道此事件发生。...对于使用@EventListener注解并定义为具有返回类型方法,Spring会将结果作为新事件发布给我们。...当我们使用@TransactionalEventListener注释方法时,我们将获得一个扩展事件侦听器,该侦听器可以了解事务: @Component class UserRemovedListener...结论 事件是为在同一应用程序上下文内Spring Bean之间进行简单通信而设计。从Spring 4.2开始,基础结构已得到显着改进,并提供了基于注释模型以及发布任意事件功能。

2.4K30

掌握 Spring 之事件处理

,内置标准事件有 5 种: 当 Spring 容器处于初始化或者刷新阶段时就会触发,事实是ApplicationContext#refresh()方法被调用时,此时容器已经初始化完毕。...主要使用 @EventListener 注解来标记需要监听程序事件方法,底层由 EventListenerMethodProcessor 对象将标注方法转为成 ApplicationListener...事件传递 另外,使用 @EventListener 还支持事件传递,将当前事件处理好结果封装后发布一个事件,实现方式就是让侦听方法返回 null 值时,就视为事件继续传播,如下面的示例代码...Publisher:触发事件发布对象,Spring 提供了 ApplicationEventPublisher 对象供我们使用,使用它publishEvent() 方法就可以发布该事件。...另外,需要注意是,当需要触发事件是在 ApplicationContext 创建之前发生时,用 @Bean 方式注册侦听器就不会执行,而 Spring Boot 为此提供了三种方式来处理这种情况:

1.2K40

从注解@EventListener和@TransactionalEventListener掌握Spring事件机制原理 - Java技术债务

当一个事件带有@TransactionalEventListener注解监听器方法处理时,它将在一个事务性上下文中被调用。...理解事务传播:当使用带有propagation.MANDATORY@TransactionalEventListener时,发布者事务背景将被传播到监听器方法。...可以在标注@EventListener方法上面使用@Order(顺序值)注解来标注顺序,如: @EventListener @Order(1) public void test(TestEvent...,如果是用事务型事件监听器@TransactionalEventListener 并且强制使用监听事务事件的话,那么如果是用此方式异步,会每次使用线程执行invokeListener 方法,并不能获取事务...具体使用哪种方式都可以,不过在公司内部最好大家都统一使用一种方式 异步事件模式,通常将一些主要业务放在监听器中执行,因为监听器中存在失败风险,所以使用时候需要注意。

11510

Spring | 事件监听器应用与最佳实践

(new TestEvent(this, message)); } } 在这个例子中,TestEventPublisher类中publishEvent方法会创建并发布一个TestEvent...()方法启动Spring上下文时,会触发ContextStartedEvent事件。...()方法停止Spring上下文时,会触发ContextStoppedEvent事件。...@Async @EventListener public void handleAsyncEvent(MyEvent event) { // 处理事件 } 设计好事件传播机制:根据业务需求,合理设计事件传播机制...针对监听器不同逻辑,编写单元测试和集成测试,确保监听器在各种情况下都能正确工作。 文档和注释:为监听器和事件提供清晰、完整文档和注释,有助于团队成员理解代码功能和用法,提高团队开发效率。

1.2K80

Spring事件

并且,如前所述,默认情况下,spring事件是同步,doStuffAndPublishAnEvent()方法将阻塞,直到所有监听器完成事件处理。...接口 bean,它可以通过@EventListener注解在托管bean任何公共方法 上注册: @Component public class AnnotationDrivenContextStartedListener...还有另一种发布事件方式,如果我们从使用@EventListener注解方法返回null值作为结果,Spring框架将把该结果作为新事件发送给我们。...从Spring 4.2开始,框架提供了一个@TransactionalEventListener注解,它是@EventListener扩展,允许将事件监听器绑定到事务一个阶段。...AFTER_COMMIT别名)会触发 AFTER_COMPLETION 如果事务已完成(AFTER_COMMIT和AFTER_ROLLBACK别名)会触发 BEFORE_COMMIT -用于在事务提交之前触发事件

74950

那些关于DOM常见Hook封装(一)

我们先来看看 addEventListener 定义,以下来自 MDN 文档: EventTarget.addEventListener() 方法将指定监听器注册到 EventTarget 上,当该对象触发指定事件时...可以留意注释几个参数作用,当做复习,这里不展开细说。 useEffect 返回逻辑,也就是组件卸载时候,会自动清除事件监听器,避免产生内存泄露。..., eventListener, { // listener 会在该类型事件捕获阶段传播到该 EventTarget 时触发。...void, // DOM 节点或者 Ref,支持数组 target: BasicTarget | BasicTarget[], // 指定需要监听事件,支持数组 eventName:...(event); }; 小结一下,useClickAway 就是使用了事件代理方式,通过 document 监听事件,判断触发事件 DOM 元素是否在 target 列表中,从而决定是否要触发定义好函数

66420

观察者模式

如果有业务添加进来,我们也只需要创建一个订阅者,并且维护到observers 容器中即可,也符合我们开闭原则。...这里需要注意是的 他是用Vector 作为订阅关系容器,同时在他定义方法中都添加synchronized关键字修饰类,以达到线程安全目的 这里我贴出了关键源码,感兴趣同学可以自己打开并且观看每个方法注释...spring有一些内置事件,当完成某种操作时会发出某些事件动作,他处理方式也就上面的这种模式,当然这里面还有很多,我没有细讲,有兴趣同学可以仔细了解下Spring启动过程。...EventBus 当前实现有两种方式: EventBus // 同步阻塞模式 AsyncEventBus // // 异步阻塞模式 EventBus内部也提供来一系列方法来供我们方便使用: register...这里我们写了两个观察者,主要看第一个SendNewPersonCouponObserver,这里了异步开启线程去处理我们业务逻辑,当我们关心返回值时候可以用Future来获取返回结果,当不关心返回值

28140

Spring学习笔记(10)一spring容器事件ApplicationEvent使用

对于 Spring 容器一些事件,可以监听并且触发相应方法。...1)ApplicationListener 接口方法: ApplicationListener通过监听容器中发布一些事件event,事件发生就会触发监听器回调,就完成了事件驱动开发....ApplicationListener是一个泛型接口,泛型类型必须是 ApplicationEvent 及其子类,只要实现了这个接口,那么当容器有相应事件触发时,就能触发 onApplicationEvent...在使用Spring作为前端MVC控制器时,当Spring处理用户请求结束后,系统会自动触发事件 2) 方法2:@EventListener 注解和 1、)使用@EventListener 注解,实现对任意方法都能监听事件...四、监听事件异步 实现方法比较简单,直接在定义方法上方加@Async()注解就好了。

75120
领券