springboot~ EventListener事件監聽的使用


EventListener事件觸發和監聽器可以對代碼解耦,在一些與業務無關的,通用的操作方法,我們可以把它設計成事件監聽器,像通知,消息這些模塊都可以這樣設計。

事件源

@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組件 ,所以它里面的事件處理程序也會被注入,這時直接注入業務對象即可

  @Autowired
  OrderService orderService;
  @Test
  public void listenerOrder() {
    orderService.publishOrder();
  }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM