也叫发布订阅模式,一般使用场景为A模块做出变更的同时通知B模块也得做出变更,例如上传视频,先将视频上传到服务端,然后由服务端上传到云端。
使用方法:
1、添加事件
package com.px.eleven.system.listen;
import lombok.Getter;
import lombok.Setter;
import org.springframework.context.ApplicationEvent;
/**
* @Desc
* @Author PengXiang
* 2022/6/14 15:06
*/
public class LoginEvent extends ApplicationEvent {
@Getter
@Setter
private String loginName;
public LoginEvent(Object source) {
super(source);
}
public LoginEvent(Object source, String loginName) {
super(source);
this.loginName=loginName;
}
}
2、添加事件监听
package com.px.eleven.system.listen;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* @Desc
* @Author PengXiang
* 2022/6/14 15:11
*/
@Component
public class LoginListener implements ApplicationListener<LoginEvent> {
@Override
public void onApplicationEvent(LoginEvent event) {
System.err.println("进入逻辑处理");
System.err.println(event);
}
}
3、触发事件
package com.px.eleven.system.controller;
import cn.hutool.extra.spring.SpringUtil;
import com.px.eleven.system.listen.LoginEvent;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* @Desc
* @Author PengXiang
* 2022/6/6 16:42
*/
@RestController
@RequestMapping("login")
public class LoginController {
@GetMapping("/login")
public Map login(){
//做登录的一些操作
...
//触发
LoginEvent loginEvent=new LoginEvent("null","pengxiang");
SpringUtil.getApplicationContext().publishEvent(loginEvent);
return map;
}
}