SpringBoot事件demo
发布方
@Service
public class UserServiceImpl implements UserService, ApplicationContextAware {
private Logger logger= LoggerFactory.getLogger(UserServiceImpl.class);
private ApplicationEventPublisher applicationEventPublisher;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationEventPublisher=applicationContext;
}
@Override
public void test(String userName){
logger.info("---------执行逻辑---{}-------------",userName);
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
applicationEventPublisher.publishEvent(new UserRegisterEvent(this,userName));
}
}).start();
}
}
订阅方
@Service
public class EmailService implements ApplicationListener<UserRegisterEvent>{
private Logger logger=LoggerFactory.getLogger(EmailService.class);
@Override
public void onApplicationEvent(UserRegisterEvent event) {
logger.info("发送邮件{}",event.getUserName());
}
}
事件类型定义
public class UserRegisterEvent extends ApplicationEvent {
private String userName;
public UserRegisterEvent(Object source, String userName) {
super(source);
this.userName = userName;
}
public String getUserName() {
return userName;
}
}
参考https://www.iocoder.cn/Spring-Boot/Event/?qun