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也可以添加在类上
立志如山 静心求实
浙公网安备 33010602011771号