极简spring 监听器使用

maven 依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

启动类代码

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    class CustomEvent extends ApplicationEvent {
        public CustomEvent(HashMap<String, String> source) {
            super(source);
        }
    }

    @RestController
    final class TestController {
        @Autowired
        private ApplicationEventPublisher applicationEventPublisher;

        @RequestMapping("/publish")
        public String test(String message) {
            HashMap hashMap = new HashMap();
            hashMap.put("key", message);
            applicationEventPublisher.publishEvent(new CustomEvent(hashMap));
            return message + "发布成功";
        }
    }

    @Component
    class Test implements ApplicationRunner {
        @Autowired
        private ApplicationContext applicationContext;
        @Autowired
        private ApplicationEventPublisher applicationEventPublisher;

        @Override
        public void run(ApplicationArguments args) throws Exception {
            HashMap hashMap = new HashMap();
            hashMap.put("ss", "s1");
            applicationContext.publishEvent(new CustomEvent(hashMap));
            // 两种发生方式一致
            hashMap.put("ss", "s2");
            applicationEventPublisher.publishEvent(new CustomEvent(hashMap));
        }
    }

    @EventListener(value = CustomEvent.class)
    public void test(CustomEvent customEvent) {
        System.out.println("getUserEvent-接受到事件:" + customEvent);
    }

    @EventListener(value = CustomEvent.class)
    public void test2(CustomEvent customEvent) {
        System.out.println("getUserEvent2-接受到事件:" + customEvent);
    }
}

posted @ 2021-09-06 19:45  临渊不羡渔  阅读(64)  评论(0编辑  收藏  举报