Подтвердить что ты не робот

Могу ли я гарантировать, что один из моих Spring ApplicationListeners будет выполнен последним?

У меня есть несколько служб, которые прослушивают события Spring, чтобы внести изменения в мою базовую модель данных. Все это работает с помощью ApplicationListener<Foo>. После того, как все прослушиватели Foo изменят базовую модель данных, мой пользовательский интерфейс должен обновиться, чтобы отразить изменения (подумайте о fireTableDataChanged()).

Есть ли способ обеспечить, чтобы конкретный слушатель для Foo всегда был последним? Или есть способ вызвать функцию, когда все остальные слушатели сделаны? Я использую аннотацию на основе проводки и конфигурацию Java, если это имеет значение.

4b9b3361

Ответ 1

Все ваши бобы реализации ApplicationListener должны также осуществлять Ordered и обеспечить ценность разумного порядка. Чем ниже значение, тем быстрее будет вызываться ваш слушатель:

class FirstListener implements ApplicationListener<Foo>, Ordered {
    public int getOrder() {
        return 10;
    }
    //...
}

class SecondListener implements ApplicationListener<Foo>, Ordered {
    public int getOrder() {
        return 20;
    }
    //...
}

class LastListener implements ApplicationListener<Foo>, Ordered {
    public int getOrder() {
        return LOWEST_PRECEDENCE;
    }
    //...
}

Кроме того, вы можете реализовать PriorityOrdered чтобы убедиться, что один из ваших слушателей всегда вызывается первым.