spring中事件发布,监听处理
事件发布(事件发布者)
事件发布是一个service,需要实现ApplicationEventPublisherAware接口,代码示例:
@Service
public class UserRegisterService implements ApplicationEventPublisherAware {
private ApplicationEventPublisher applicationEventPublisher;
// 消息发布的方法,自己实现
public boolean register(User user) {
//消息发布
applicationEventPublisher.publishEvent(new UserRegisterEvent(this, user));
return true;
}
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.applicationEventPublisher = applicationEventPublisher;
}
}
事件定义
事件需要继承ApplicationEvent类
public class UserRegisterEvent extends ApplicationEvent {
private static final long serialVersionUID = -5481658020206295565L;
private User user;
//谁发布的这个事件,souce就是谁(对象)
public UserRegisterEvent(Object source, User user) {
super(source);
this.user = user;
}
public User getUser() {
return user;
}
}
事件监听
事件监听需要实现ApplicationListener接口
@Component
public class EventListener implements ApplicationListener<UserRegisterEvent> {
@Override
public void onApplicationEvent(UserRegisterEvent event) {
// 接收到事件
System.out.println("接受到事件event:"+JSON.toJSON(event));
}
}
使用
注册事件即可
@RestController
@RequestMapping("/user")
public class UserRegisterController {
@Autowired
private UserRegisterService userRegisterService;
@PostMapping("/register")
public String register(@RequestBody User user) {
//进行注册
userRegisterService.register(user);
return "[controller]注册用户成功!";
}
}