这个是看着资料自己整的小案例,项目里没有场景用到。
spring的事件流程
1.自定义事件,继承ApplicationEvent
2.自定义事件监听器,实现ApplicationListener
3.发布事件
自定义事件
public class DemoEvent extends ApplicationEvent { private String message; public DemoEvent(Object source,String message) { super(source); this.message = message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
自定义事件监听器
@Component public class DemoListener implements ApplicationListener<DemoEvent> { @Override public void onApplicationEvent(DemoEvent demoEvent) { String message = demoEvent.getMessage(); System.out.println("DemoListener 收到了消息:" + message); } }
发布事件
@Component public class DemoPublisher { @Autowired private ApplicationContext applicationContext; public void publish(String message) { applicationContext.publishEvent(new DemoEvent(this, message)); } }
测试:
@RestController public class DemoController { @Autowired private DemoPublisher demoPublisher; @GetMapping(value = "index") public String index(@RequestParam("message") String message) { demoPublisher.publish(message); return "success"; } }
访问一次就会输出一个消息
DemoListener 收到了消息:hello1
DemoListener 收到了消息:张三
当使用容器发布DemoEvent,监听器就会把当前消息输出。类比下,当bean与bean之间通信时,一个bean处理完某些任务时,可以通知另一个bean做后续的处理。