spring 容器的自带事件以及 自定义事件

Spring事件监听器及自定义事件的使用 文章目录一、前言二、事件监听器(ApplicationListener)的使用1. 创建MyApplicationListener实现ApplicationListener接口2. 创建控制器类3. 编写测试方法三、自定义事件的使用1. 定义一个MyEvent类2. 修改测试方法3. 修改监听器类四、Spring的默认事件 一、前言 前几天研究Spring IOC容器创建过程时,分析到事件广播器和... 阅读详情

ApplicationEvent

spring 的事件是为bean与bean 之间的消息通信提供了支持,当一个bean 处理完一个任务后,希望另外一个bean 知道并能够做出相应的处理,这时需要另外一个bean监听当前bean 所发送的事件。
ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。
ApplicationEvent 可以对多种事件进行监听,下面是一些简单的事件监听

@Component
public class ApplicationConfig implements ApplicationListener<ApplicationEvent> {
    private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationConfig.class);

    @Override
    public void onApplicationEvent(ApplicationEvent applicationEvent) {
        if (applicationEvent instanceof ContextStartedEvent) {
            LOGGER.info("spring  happen start work");
        } else if (applicationEvent instanceof ContextRefreshedEvent) {
            //一般来说,可以使用ContextRefreshedEvent 在程序启动的时候运行一些需要程序运行的方法,例如文本的读取等
            if (((ContextRefreshedEvent) applicationEvent).getApplicationContext().getParent() == null) {
                LOGGER.info("spring happen  refresh event ");
            }
        } else if (applicationEvent instanceof ContextStoppedEvent) {
            LOGGER.info("spring happen stop event ");
        } else if (applicationEvent instanceof ContextClosedEvent) {
            LOGGER.info("spring happen close  event ");
        } else {
            LOGGER.info("spring  happen other  event " + applicationEvent.getClass().getSimpleName());
        }
    }
}

ContextRefreshedEvent 事件需要特别注意,他可以支持在程序启动的时候执行需要执行的方法

自定义事件

spring 的事件需要遵循以下流程

  1. 继承ApplicationEvent 实现自定义事件
/**
 * Created by Sean on 2018/7/19
 *
 * @author Sean
 */
public class UserEvent extends ApplicationEvent {
    private String msg;
    public UserEvent(Object source ,String msg) {
        super(source);
        this.msg=msg;
    }

    public String getMsg() {
        return msg;
    }
}
  1. 定义事件监听器 实现applicationListener
    (1.实现applicationListener ,并指定监听事件的类型
    1. 使用onapplicationevent 方法对消息进行接收处理 )
/**
 * Created by Sean on 2018/7/19
 *
 * @author Sean
 */
@Component
public class UserEventListener implements ApplicationListener<UserEvent> {
    private static final Logger LOGGER= LoggerFactory.getLogger(UserEventListener.class);
    @Override
    public void onApplicationEvent(UserEvent userEvent) {
        String msg = userEvent.getMsg();
        LOGGER.info("User Event Listener get Msg form UserEvent is "+msg);
    }
}
  1. 使用容器发布事件
    1.注入 applicationcontext 来发布事件
    2.使用applicationcontext的publishevent 方法来发布事件
@Component
public class UserEventPublisher {
    @Autowired
    private ApplicationContext applicationContext;
    public void publish(String msg){
        applicationContext.publishEvent(new UserEvent(this,msg));
    }

}
  1. 发布事件
@RestController
public class UserEventController {
    @Autowired
    private UserEventPublisher userEventPublisher;
    @RequestMapping("publish")
    public String publish(){
        userEventPublisher.publish("hello user");
        return "publish event";
    }
}

github url:springbootcustomerevent

提升RAG效果:为何 JSON 格式远胜 Markdown? 在构建强大的 RAG (检索增强生成) 系统时,文档解析是至关重要的第一步。它直接影响着后续的检索效率和生成质量。在众多文档格式中,JSON (JavaScript Object Notation) 格式正逐渐展现出其相对于传统 Markdown 格式的巨大优势。本文将深入探讨 JSON 在 RAG 系统文档解析中的卓越之处,并结合具体案例,让你理解为何 JSON 才是构建下一代智能应用的更优选择。RAG 系统的核心目标是让模型能够利用外部知识库,生成更精准、更贴合实际的答案。 阅读详情

相关推荐

YOLO26改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv11的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下: 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检测头对应的经过了更多的下采样操作,相比P3/

Limiiiing的博客 286

Spring事件发布机制

Spring 事件发布机制详解

JavaJasper的博客 2282

2001-2022年《中国环境统计年鉴》面板数据-最新出炉.zip

2001-2022年《中国环境统计年鉴》面板数据-最新出炉.zip

spring发布事件的3种方式

通过Spring自身的事件机制来发布事件。包括同步方式,同步注解方式,异步注解方式:1)同步方式。首先定义事件类:通过继承ApplicationEvent来将普通对象设置成Spring事件package com.wxq.ssm.common.event; import org.springframework.context.ApplicationEvent; /** * @author xu...

Seeker-Wu的专栏 3305

Spring中的事件机制

在这篇文章我们将介绍Spring事件机制,包括Spring内置事件自定义事件事件监听、事件发布、事件广播机制、事件异常处理等内容。Spring事件是对JDK提供的观察者模式,结合Spring容器进行的深度扩展,了解Spring提供了那些内置事件,以及如何自定义事件可以让我们很方便的对Spring框架进行扩展,来实现更多更丰富的功能。

qq_43408971的博客 1263

Spring事件机制

自定义一个事件类,继承ApplicationEvent。该事件可以被ApplicationContext通过publishEvent方法进行发送return msg;@Subscribe@Override/*** 注解@AllowConcurrentEvents是用来标识当前订阅者是线程安全的。

weixin_45102820的博客 2535

Spring内置事件监听器

Spring内置监听器

u014365523的博客 2380

java自定义监听事件吗_Java Spring 自定义事件监听

ApplicationContext事件定义一个context的起动监听事件importorg.springframework.context.ApplicationListener;importorg.springframework.context.event.ContextStartedEvent;public class EventStart implements ApplicationL...

weixin_42524945的博客 240

springboot实战原理分析笔记(六)-事件监听

1. 事件监听步骤: 1.自定义事件,一般是继承ApplicationEvent抽象类 2.定义事件监听器,一般是实现ApplicationListener接口 3.启动的时候需要把监听器加入到spring容器中 4.发布事件:使用ApplicationContext 的 ApplicationEventPublisher接口的publishEvent方法 2. 配置监听器方法: 1.使用con...

fsdf8sad7的博客 259

Spring容器事件自定义事件

Spring容器事件自定义事件 Spring容器内置事件,如容器的启动、停止、关闭、销毁等事件 <bean name="contextStartedHandler" class="com.nuts.demo.spring.ContextStartedHandler"> </bean> <be...

176

Spring高手之路15——掌握Spring事件监听器的内部逻辑与实现

深入探索Spring事件处理机制,从事件的层次传播、PayloadApplicationEvent的使用,到为何选择自定义事件。本文详细剖析了Spring 5.x的事件模型、事件发布源码、ApplicationEventMulticaster的作用以及事件广播的核心逻辑。通过详细的流程图与图示,读者可以更好地理解Spring事件传播、异步处理等关键概念,为成为Spring高手奠定坚实基础。

卓越无关环境,保持空杯心态——靡不有初,鲜克有终 1万+

Spring IOC 入门简介【自定义容器实例】

Spring IOC 入门简介附实例讲解,控制反转思想及自定义容器

qq_53317005的博客 5106

Spring framework Day 23:容器事件

在实际开发中,我们可以在Spring应用程序上下文中注册一个或多个事件监听器,这些监听器会异步地处理在应用程序上下文中发布的事件。通过这种方式,我们可以将不同模块之间的逻辑分离,提高代码的清晰度和可读性。因此,掌握容器事件机制对于一个Java开发人员来说是非常重要的,它可以帮助我们写出更加优秀、高效、可靠的代码。

zhiqiuqiu2的博客 1206

Spring自定义事件发布-监听

一、监听器模式 监听者通过向发布者注册自身(自身可以理解为监听者对象),如果有事件发生,发布者会调用注册列表里的监听者的某方法并把事件事件内部持有事件源)作为参数传入。 在Spring中需要我们自己定义事件监听器、事件。发布器不需要自定义,但需要设法通过上下文拿到发布器。(可以思考下为什么这么设计?) 二、基于Spring实现的消息监听类图详解 1、事件: EventObject:是JDK自带事件,是个具体的类,本身持有一个Object事件源用来定义本次事件的具体描述。EventObjec

I want to know a little more. 829

spring event事件(一)介绍与实现

当某个事件触发的时候,就会执行的方法块。当然,springboot很贴心地提供了一个注解来实现监听。自定义事件return msg;@Slf4j@Component@Overridelog.info("监听到 ContextRefreshedEvent...");log.info("监听到 MyEvent...");System.out.println("时间:" + myEvent.getTime() + " 信息:" + myEvent.getMsg());

w_t_y_y的博客 2194

springBoot自带事件

springboot自带的event事件应用普及

qq_42545419的博客 806

Spring 学习之扩展点总结之内置事件(四)

Spring学习之扩展点总结之自定义事件中介绍了什么是 Event事件以及自定义事件的用法,但是还没有完,Spring还提供了四种内置事件供我们使用,本文就主要讲解Spring 内置事件。什么是 Spring 内置事件,在 自定义事件 篇中介绍了 Spring 事件以及自定义事件的用法,在 Spring 内部也整合了不同的事件供我们使用。

qq_19283249的博客 2349

Spring入门—内置事件事件的发布监听、事件的处理机制以及监听器排序

Spring入门—事件的发布监听以及事件的处理机制如何发布及监听事件发布事件监听事件内置事件事件处理机制初始化广播者注册收集到的监听器发布事件 如何发布及监听事件 发布事件 发布事件的核心代码调用是publishEvent,只要可以获取到applicationContext就可以发布事件了。 @Test public void test1(){ ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicatio

wx的博客 578

spring事件(一)--内置事件

spring事件(一)--内置事件

panda-star的博客 3472

Spring 学习之扩展点总结之自定义事件(三)

Spring学习之扩展点总结(二)介绍了 InitializingBean 和 BeanPostProcessor 的异同点和FactoryBean 和 BeanFactory 的区别。Spring 除了这些扩展点还提供了 Event 事件操作,本文主要介绍这些事件的操作。Spring事件就类似于一个活动,比如我们平时举办一个活动或者是某个音乐会,有主持人,指挥员,各种乐器手组成,音乐会开始,指挥员挥舞着手中的指挥棒,下面的各个乐器手就会弹奏不同的音律,这样配合之下,美妙的音乐就产生了。

qq_19283249的博客 936
上一篇: Spring Bean 自动装配 的歧义性(bean 的名称重复)处理
下一篇: Spring 条件注解(conditional)
Sean_zzZ
博客等级 码龄9年 18粉丝 105原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值