2012-06-05 22 views
15

Temel veri modelimde değişiklikler yapmak için Bahar olaylarını dinleyen birkaç hizmetim var. Bunların hepsi, ApplicationListener<Foo> uygulayarak çalışır. Foo dinleyicilerinin tümü temel veri modelini değiştirdikten sonra, kullanıcı arayüzünün değişiklikleri yansıtacak şekilde yenilenmesi gerekiyor (fireTableDataChanged()'u düşünün).İlkbahar UygulamaListenlerimden birinin en son çalıştırılmasını sağlayabilir miyim?

Foo için belirli bir dinleyicinin her zaman en son kalmasını sağlamanın bir yolu var mı? Veya diğer tüm dinleyiciler bittiğinde bir işlevi çağırmanın herhangi bir yolu var mı? Bu önemli ise ek açıklama tabanlı kablolama ve Java config kullanıyorum.

+1

Dinleyicilerinizin her birine ['Ordered'] (http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/Ordered.html) uygulamasını deneyebilir ve ayarlayabilir misiniz? uygun şekilde sipariş verilsin mi? –

+0

@TomaszNurkiewicz Umut verici görünüyor, bir saniye içinde deneyeceğim. – Luke

+0

@TomaszNurkiewicz bunu bir cevaba koyduğunuza emin olmanız için size kredi verebilirim? Bu harika çalıştı! – Luke

cevap

26

ApplicationListener'u uygulayan tüm çekirdekleriniz de Ordered'u uygulamalı ve makul sipariş değeri sağlamalıdır. alt değer, o kadar çabuk dinleyici çağrılır:

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; 
    } 
    //... 
} 

Üstelik emin işleyicilerinizde biri daima ilk çağrıldığında yapmak PriorityOrdered uygulayabilir.

+0

Auth olay dinleyicileri için siparişin göz ardı edilmesi mümkün mü? CustomAuthListener uygulamasının ApplicationListener , Ordered 'özelliğini kullanması gerekiyordu, ancak "LOWEST_PRECEDENCE" iadesi hiç çağrılmadı. Neyse ki sorunumu gidermek için 'AuthenticationSuccessEvent' yerine' InteractiveAuthenticationSuccessEvent' dinlemeliydim. –

İlgili konular