目录
发布订阅机制三要素:事件、发布者、订阅者
一、事件
public class UserRegisterEvent extends ApplicationEvent {
public UserRegisterEvent(String name) {
super(name);
}
}
二、发布者
@Service
public class UserService implements ApplicationEventPublisherAware {
public void register(String name) {
System.out.println("用户:" + name + " 已注册!"+Thread.currentThread().toString());
applicationEventPublisher.publishEvent(new UserRegisterEvent(name));
System.out.println("用户:" + name + " 已注册! finish "+Thread.currentThread().toString());
}
private ApplicationEventPublisher applicationEventPublisher;
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.applicationEventPublisher = applicationEventPublisher;
}
}
三、订阅者
@Service
public class EmailService implements ApplicationListener<UserRegisterEvent> {
@Override
public void onApplicationEvent(UserRegisterEvent userRegisterEvent) {
System.out.println("邮件服务接到通知,给 " + userRegisterEvent.getSource() + " 发送邮件..."+Thread.currentThread().toString());
}
}
加入接口事件
@Autowired
private UserService userService;
@RequestMapping("/register")
public String register(){
userService.register("xttblog.com");
return "success";
}
启动服务
访问http://localhost:8080/register,可看到log,发布和事件接收。
四、异步
异步订阅者
@Component
public class MyEventListener {
@EventListener
@Async
public void listenerEvent(UserRegisterEvent event) {
System.out.println("listener 邮件服务接到通知,给 " + event.getSource() + " 发送邮件..."+Thread.currentThread().toString());
}
}
加入开启异步任务
@EnableAsync
事件上@Async
启动服务,可看到log,发布和事件接收为异步。