spring boot中如何创建事件监听器呢?

戚薇 SpringBoot 发布时间:2023-06-09 22:48:12 阅读数:7040 1
下文笔者讲述SpringBoot中创建事件监听器的方法及示例分享

创建事件监听器的实现思路

方式1:
   1.1.定义一个ApplicationEvent
   1.2.定义Applicationlistener监听器
   1.3.使用springApplication对象的add方法
        将监听器添加到springboot的启动对象中

方式2:
   使用@Component和@EventListener注解定义一个事件监听器

方式3:
   配置文件中定义监听器
例:创建监听器的示例
package com.java265.bootsample.listener;
import org.springframework.context.ApplicationEvent;

public class BlackListEvent extends ApplicationEvent {
    private String address;
    public BlackListEvent(Object source, String address){
        super(source);
        this.address = address;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

//定义事件监听器
package com.java265.bootsample.listener;

import org.springframework.context.ApplicationListener;

public class BlackListListener implements ApplicationListener<BlackListEvent> {
    @Override
    public void onApplicationEvent(BlackListEvent blackListEvent) {
        String threaid = Thread.currentThread().getName();
        System.out.println(threaid + "收到回调事件:" + blackListEvent.getAddress());
    }
}

//监听器注册到spring boot中

package com.java265.bootsample;

import com.java265.bootsample.listener.BlackListListener;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;

@SpringBootApplication
public class BootsampleApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(BootsampleApplication.class);
        app.addListeners(new BlackListListener());
        app.run(args);
    }
    
}

//测试代码
package com.java265.bootsample.service;

import com.java265.bootsample.listener.BlackListEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.atomic.AtomicLong;

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();
    @Autowired
    private ApplicationContext context;
    @GetMapping("/test")
    public Test test(@RequestParam(value = "name", defaultValue = "World") String name) {
        BlackListEvent event = new BlackListEvent(this, "greeting");
        context.publishEvent(event);
        return new Test(counter.incrementAndGet(), String.format(template, name));
    }
}


package com.java265.bootsample.service;

public class Test {
    private final long id;
    private final String content;

    public Test(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}

http://localhost:8080/test

方式2:使用注解生成监听器

使用
@Component和@EventListener两个注解

//生成监听器

package com.java265.bootsample.listener;

import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Component;

@Component
public class AnnotationListener {
    @EventListener
    public void processBlacklistEvent(BlackListEvent event){
        String threaid = Thread.currentThread().getName();
        System.out.println("annotation listener------------------" + threaid);
    }
}
例2:
package com.java265.bootsample.listener;

import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Component;

@Component
public class AnnotationListener {
    @EventListener
    @Async
    public void processBlacklistEvent(BlackListEvent event){
        String threaid = Thread.currentThread().getName();
        System.out.println("annotation listener------------------" + threaid);
    }
}


package com.java265.bootsample;

import com.java265.bootsample.listener.BlackListListener;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;

@SpringBootApplication
@EnableAsync
public class BootsampleApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(BootsampleApplication.class);
        app.addListeners(new BlackListListener());
        app.run(args);
    }

}

application.properties定义事件监听器

定义多个监听器的示例

context.listener.classes=\
  com.java265.bootsample.listener.BlackListListener,\
  com.java265.bootsample.listener.BlackListListener2
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202306/6763.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者