在springboot做简单的发布订阅

61 阅读1分钟

概念类比

事件发布者 (解耦其他业务逻辑,仅仅是发布)

ApplicationEventPublisherAware

事件监听者 (业务逻辑处理)

ApplicationListener

事件 (消息载体)

UserRegisterEvent

show code

事件发布者 (解耦其他业务逻辑,仅仅是发布)

public class UserRegister implements ApplicationEventPublisherAware {
    private ApplicationEventPublisher applicationEventPublisher;
	
	public boolean register(User user) {
		//用户注册
		System.out.println("[service]用户["  + user + "]注册成功!");
		//消息发布
		applicationEventPublisher.publishEvent(new UserRegisterEvent(this, user));
		return true;
	}
	
	@Override
	public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
		this.applicationEventPublisher = applicationEventPublisher;
		
	}
}

事件监听者 (业务逻辑处理)


public class EventListener implements ApplicationListener<UserRegisterEvent> {
	@Override
	public void onApplicationEvent(UserRegisterEvent event) {
            System.out.println("正在发送邮件至: " + event.getUser().getEmail());
            System.out.println("正在发短信到: " + event.getUser().getPhoneNum());		
	}
}

事件 (消息载体)

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;
	}
}