一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springboot 事件監聽的實現方法

springboot 事件監聽的實現方法

2021-07-31 12:14lijingyulee Java教程

這篇文章主要介紹了springboot 事件監聽的實現方法,并詳細的介紹了四種監聽方式,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

定義事件

?
1
2
3
4
5
6
7
8
9
@getter
public class testevent extends applicationevent {
 private string msg;
 
 public testevent(object source, string msg) {
  super(source);
  this.msg = msg;
 }
}

定義事件監聽(注解方式)

?
1
2
3
4
5
6
7
@component
 public class testlisten {
 @eventlistener
 public void testlisten(testevent event) {
  system.out.println(event.getmsg());
 }
}

注意:@component 注解

發布事件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@autowired
private applicationcontext publiser;
 
@getmapping("test-listen")
public void testlisten() {
 for (int i = 0; i < 10; i++) {
  system.out.println("i = " + i);
 }
 publiser.publishevent(new testevent(this, "測試事件監聽"));
 for (int j = 0; j < 10; j++) {
  system.out.println("j = " + j);
 }
}

測試時執行順序:

  • i循環
  • 打印"event = [測試事件監聽]"
  • j循環

異步監聽

監聽加上@async注解

?
1
2
3
4
5
6
7
8
9
10
@component
public class testlisten {
 @eventlistener
 @async
 public void testlisten(testevent event) {
  for (int i = 0; i < 10; i++) {
   system.out.println("event = [" + event.getmsg() + "]");
  }
 }
}

測試時執行順序:

  • i循環
  • j循環
  • 打印"event = [測試事件監聽]"

代碼:async 

springboot進行事件監聽有四種方式:

1.手工向applicationcontext中添加監聽器
2.將監聽器裝載入spring容器
3.在application.properties中配置監聽器
4.通過@eventlistener注解實現事件監聽

講到事件監聽,這里我們說下自定義事件和自定義監聽器類的實現方式:

  • 自定義事件:繼承自applicationevent抽象類,然后定義自己的構造器
  • 自定義監聽:實現applicationlistener<t>接口,然后實現onapplicationevent方法

下面講下4種事件監聽的具體實現

方式1.

首先創建mylistener1類

?
1
2
3
4
5
6
7
8
9
public class mylistener1 implements applicationlistener<myevent>
{
 logger logger = logger.getlogger(mylistener1.class);
 
 public void onapplicationevent(myevent event)
 {
 logger.info(string.format("%s監聽到事件源:%s.", mylistener1.class.getname(), event.getsource()));
 }
}

然后在springboot應用啟動類中獲取configurableapplicationcontext上下文,裝載監聽

?
1
2
3
4
5
6
7
8
9
10
@springbootapplication
public class lisenterapplication
{
 public static void main(string[] args)
 {
 configurableapplicationcontext context = springapplication.run(lisenterapplication.class, args);
 //裝載監聽
 context.addapplicationlistener(new mylistener1());
 }
}

方式2.

創建mylistener2類,并使用@component注解將該類裝載入spring容器中

?
1
2
3
4
5
6
7
8
9
10
@component
public class mylistener2 implements applicationlistener<myevent>
{
 logger logger = logger.getlogger(mylistener2.class);
 
 public void onapplicationevent(myevent event)
 {
 logger.info(string.format("%s監聽到事件源:%s.", mylistener2.class.getname(), event.getsource()));
 }
}

方式3.

首先創建mylistener3類

?
1
2
3
4
5
6
7
8
9
public class mylistener3 implements applicationlistener<myevent>
{
 logger logger = logger.getlogger(mylistener3.class);
 
 public void onapplicationevent(myevent event)
 {
 logger.info(string.format("%s監聽到事件源:%s.", mylistener3.class.getname(), event.getsource()));
 }
}

然后在application.properties中配置監聽

?
1
context.listener.classes=com.listener.mylistener3

方式4.

創建mylistener4類,該類無需實現applicationlistener接口,使用@eventlistener裝飾具體方法

?
1
2
3
4
5
6
7
8
9
10
11
@component
public class mylistener4
{
 logger logger = logger.getlogger(mylistener4.class);
 
 @eventlistener
 public void listener(myevent event)
 {
 logger.info(string.format("%s監聽到事件源:%s.", mylistener4.class.getname(), event.getsource()));
 }
}

自定義事件代碼如下:

?
1
2
3
4
5
6
7
8
@suppresswarnings("serial")
public class myevent extends applicationevent
{
 public myevent(object source)
 {
 super(source);
 }
}

進行測試(在啟動類中加入發布事件的邏輯):

?
1
2
3
4
5
6
7
8
9
10
11
12
@springbootapplication
public class lisenterapplication
{
 public static void main(string[] args)
 {
 configurableapplicationcontext context = springapplication.run(lisenterapplication.class, args);
 //裝載事件
 context.addapplicationlistener(new mylistener1());
 //發布事件
 context.publishevent(new myevent("測試事件."));
 }
}

啟動后,日志打印如下:

2018-06-15 10:51:20.198  info 4628 --- [           main] com.listener.mylistener3                 : com.listener.mylistener3監聽到事件源:測試事件..
2018-06-15 10:51:20.198  info 4628 --- [           main] com.listener.mylistener4                 : com.listener.mylistener4監聽到事件源:測試事件..
2018-06-15 10:51:20.199  info 4628 --- [           main] com.listener.mylistener2                 : com.listener.mylistener2監聽到事件源:測試事件..
2018-06-15 10:51:20.199  info 4628 --- [           main] com.listener.mylistener1                 : com.listener.mylistener1監

聽到事件源:測試事件..

由日志打印可以看出,springboot四種事件的實現方式監聽是有序的

完整的代碼路徑:https://github.com/ingorewho/springboot-develope/tree/master/springboot-listener

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://segmentfault.com/a/1190000018839229

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品酒店视频免费看 | 999热这里只有精品 999久久久免费精品国产牛牛 | 偷偷操不一样 | 免费看一区二区三区 | 91在线播 | 久久九九有精品国产23百花影院 | 精品欧美一区二区三区四区 | 娇妻与老头绿文小说系列 | 亚洲成人影院在线 | japanesen女同 | 国产第一福利视频导航在线 | 大胸纲手被羞羞漫画网站 | 无人在线视频高清免费播放 | 精品国产福利片在线观看 | 午夜伦理yy44008影院 | 亚洲成在人线视频 | 美女被网站 | 动漫美女隐私尿口图片 | 精品国产午夜久久久久九九 | 亚洲人成绝费网站色ww | 国产欧美一区二区精品性色 | 国产成人精品本亚洲 | 大香焦在线观看 | 国产视频在线一区 | 国产日产国无高清码2020 | 国产成人愉拍免费视频 | 操大肥b| 扒开女人下面使劲桶屁股动漫 | 日本福利视频网站 | 国产精品免费 | 无毛黄片| 国产欧美日韩在线不卡第一页 | 情人梁家辉在线 | 亚洲欧美日韩成人 | ffee性xxⅹ另类老妇hd | 亚洲国产三级在线观看 | 亚洲AV精品无码喷水直播间 | 2018天天拍拍拍免费视频 | 99精品在免费线视频 | 久久99精国产一区二区三区四区 | 日本高清色视影www日本 |