springboot~ EventListener事件監聽的使用

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

事件源

@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組件 ,因此它裏面的事件處理程序也會被注入,這時直接注入業務對象便可app

@Autowired
  OrderService orderService;
  @Test
  public void listenerOrder() {
    orderService.publishOrder();
  }
相關文章
相關標籤/搜索