springboot~ EventListener事件監(jiān)聽(tīng)的使用
EventListener事件觸發(fā)和監(jiān)聽(tīng)器可以對(duì)代碼解耦,在一些與業(yè)務(wù)無(wú)關(guān)的,通用的操作方法,我們可以把它設(shè)計(jì)成事件監(jiān)聽(tīng)器,像通知,消息這些模塊都可以這樣設(shè)計(jì)。
事件源
@Getter
@Builder(toBuilder = true)
public class OrderEvent {
private String msg;
}
事件處理程序
@Component
public class OrderEventListener {
@EventListener
public void handleOrderEvent(OrderEvent event) {
System.out.println("我監(jiān)聽(tīng)到了handleOrderEvent發(fā)布的message為:" + event.getMsg());
}
}
事件觸發(fā)
@Service
public class OrderService {
@Autowired
private ApplicationContext context;
public void publishOrder() {
context.publishEvent(OrderEvent.builder().msg("建立訂單").build());
}
}
直接測(cè)試事件處理程序
@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("測(cè)試方法").build());
}
測(cè)試業(yè)務(wù)代碼
由于@Service也是spring組件 ,所以它里面的事件處理程序也會(huì)被注入,這時(shí)直接注入業(yè)務(wù)對(duì)象即可
@Autowired
OrderService orderService;
@Test
public void listenerOrder() {
orderService.publishOrder();
}
浙公網(wǎng)安備 33010602011771號(hào)