ApplicationEvent实现异步调用

事件机制

 事件机制在java的设计模式中也可以叫监听器模式或者是观察者模式,事件有三个部分,事件发布、监听、和事件源,设计是为了系统业务之间进行解耦,以便提高系统可扩展性、可维护性

 事件源

package com.smart.event;

import lombok.Data;
import org.springframework.context.ApplicationEvent;

@Data
public class MessageEvent extends ApplicationEvent{
    private String message;

    public MessageEvent(Object source,String message) {
        super(source);
        this.message=message;
    }

}

  定义监听器监听事件,实现ApplicationListener 接口:

package com.smart.event;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class EventHandler  {

    @EventListener
    public void handle(MessageEvent messageEvent){
        log.info("监听到消息:"+messageEvent.getMessage());
    }

}

  事件发布

package com.smart.event;

import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Component;

@Component
public class EventPublisher implements ApplicationEventPublisherAware {

    private ApplicationEventPublisher publisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.publisher=applicationEventPublisher;
    }

    public void publish(ApplicationEvent applicationEvent){
        publisher.publishEvent(applicationEvent);
    }
}

  Controller发布事件

@RestController
@RequestMapping("/hello")
public class HelloController {

    @Autowired
    EventPublisher eventPublisher;

    @GetMapping("message")
    public void helloEvent(@RequestParam(value="message") String message){
        MessageEvent event = new MessageEvent(new Object(), message);
        eventPublisher.publish(event);
    }

}

  异步事件

  开启异步配置在配置类中添加注解@EnableAsync 
  通过MessageListener 在onApplicationEvent上添加注解@Async,@Async也可以添加在类上

posted on 2019-10-26 13:30  溪水静幽  阅读(2218)  评论(0)    收藏  举报