首页 > 编程知识 正文

springboot事件监听器,spring 监听

时间:2023-05-04 20:37:15 阅读:178849 作者:1525

Spring事件及监听背景:上周在公司codereview的时候,看到有一个代码被用于Spring的事件监听。 我本来就不知道,所以在网上找资料学习了。

介绍:以下说明均为摘录。

Spring事件(Application Event )支持Bean和Bean之间的消息通信。 为了使一个Bean在处理完一个任务后能够知道并正确处理,另一个Bean必须侦听当前Bean发送的时间。 (观察者模式)

Spring事件必须遵循以下流程:

自定义事件,集成应用程序事件。 定义事件侦听器并实现应用程序监听器。 使用容器发布事件。 简单地说,在系统的业务逻辑之间进行了解耦,提高了可扩展性和可维护性。 事件发布者不需要考虑谁来监听,而是监听具体的实现内容是什么,发布者的工作只是为了发布事件。

代码示例:1.定制事件必须继承ApplicationEvent并实现生成方法。

publicclassusereventextendsapplicationevent { privatebasebeanbasebean; /** *构造函数重写* @发生* @param source事件的对象*/publicuserevent(objectsource,basebean ) ) super ) source ); this.baseBean=baseBean; } public BaseBean getBaseBean () { return baseBean; } publicvoidsetbasebean (basebeanbasebean ) { this.baseBean=baseBean; }2.在实现事件监听器、监听方法时,大多可以使用注释,或者实现接口APP列表

@ componentpublicclassuserbeanlistener {/* * *监听的实现方法* @param event监听事件*/@ eventlistenerpublicvoidregister (usereventevent ) ) ) ) ) ) ) 652 { system.out.println (userbean listener 332 ) }3.发表事件

@ servicepublicclassregisterservice { @ autowiredprivateapplicationcontextapplicationcontext; PublicVoidRegister((/**这里的UserA和UserB都是BaseBean的子类) */UserA a=new UserA ); a .设置名称(a ); UserB b=new UserB (; b.setname(b ); //释放事件usereventapplicationcontext.publish event (new user event (this,a ) ); //释放事件usereventapplicationcontext.publish event (new user event (this,b ) ); }4.控制器为了看到效果而添加了这个控制器,但实际上通过完成上述三个步骤就实现了spring的事件和监听

@ restcontrollerpublicclassusercontroller { @ autowiredprivateregisterserviceregisterservice; @ request mapping (value='/register ',method=RequestMethod.GET ) public void register ) { registerService.register (5 ()

总结:1.首先,事件的公开和拦截是同步的过程。 同事当时争论了,所以特意试了一下。 正如上面的代码中先前公开了UserA事件的一样,在UserA事件侦听器的业务逻辑执行之前,始终为等待userbean监听器注册器的事件侦听器分配异步

2 .如果所发布的事件是基类(BaseEvent ),并且同时实现了侦听基类事件(BaseEventListener )和侦听子类事件(UserEventListener )。 此时发出子类的事件时,编译会正常通过,服务也会启动。 但是,如果实际运行时报告了错误。 原因还没有仔细看过.

3 .事件和侦听器对由事件的类型和侦听器方法中的参数类型决定。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。