springboot~ EventListener事件(jian)監聽(ting)的(de)使用
EventListener事件觸發(fa)和監聽器(qi)可(ke)以(yi)(yi)對代碼(ma)解耦,在一(yi)些(xie)與(yu)業(ye)務無關的,通用的操作方法,我們可(ke)以(yi)(yi)把它設計成事件監聽器(qi),像通知(zhi),消息這些(xie)模塊(kuai)都可(ke)以(yi)(yi)這樣設計。
事件源
@Getter
@Builder(toBuilder = true)
public class OrderEvent {
private String msg;
}
事件處理程序
@Component
public class OrderEventListener {
@EventListener
public void handleOrderEvent(OrderEvent event) {
System.out.println("我監聽到了handleOrderEvent發布的message為:" + event.getMsg());
}
}
事件觸發
@Service
public class OrderService {
@Autowired
private ApplicationContext context;
public void publishOrder() {
context.publishEvent(OrderEvent.builder().msg("建立訂單").build());
}
}
直接測試事件處理程序
@RunWith(SpringRunner.class)
@SpringBootTest
public class SecurityApplicationTests implements ApplicationContextAware {
private ApplicationContext context = null;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
@Test
public void listener() {
context.publishEvent(OrderEvent.builder().msg("測試方法").build());
}
測試業務代碼
由于@Service也是spring組件 ,所以它里面(mian)的事(shi)件處理程序也會被(bei)注入,這時直接注入業務(wu)對(dui)象即可(ke)
@Autowired
OrderService orderService;
@Test
public void listenerOrder() {
orderService.publishOrder();
}