2012-06-05 36 views
15

Tôi có một số dịch vụ đang lắng nghe các sự kiện mùa xuân để thực hiện các thay đổi đối với mô hình dữ liệu cơ bản của tôi. Tất cả đều hoạt động bằng cách triển khai ApplicationListener<Foo>. Khi tất cả các trình nghe của Foo sửa đổi mô hình dữ liệu cơ bản, giao diện người dùng của tôi cần phải làm mới để phản ánh các thay đổi (xem fireTableDataChanged()).Tôi có thể đảm bảo rằng một trong các ứng dụng SpringListList của tôi được thực thi cuối cùng không?

Có cách nào để đảm bảo rằng một người nghe cụ thể cho Foo luôn luôn là cuối cùng? Hay có cách nào để gọi một hàm khi tất cả người nghe khác được thực hiện? Tôi đang sử dụng hệ thống dây dẫn dựa trên chú thích và cấu hình Java, nếu điều đó quan trọng.

+1

Bạn có thể thử triển khai ['Ordered'] (http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/Ordered.html) trong mỗi người nghe và điều chỉnh đặt hàng một cách thích hợp? –

+0

@TomaszNurkiewicz Điều đó có vẻ đầy hứa hẹn, tôi sẽ thử trong giây lát. – Luke

+0

@TomaszNurkiewicz chăm sóc bạn đặt câu trả lời đó để tôi có thể cung cấp tín dụng cho bạn? Điều đó làm việc tuyệt vời! – Luke

Trả lời

26

Tất cả các hạt của bạn thực hiện ApplicationListener cũng phải triển khai Ordered và cung cấp giá trị đơn đặt hàng hợp lý. Càng thấp giá trị, sớm nghe của bạn sẽ được gọi:

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

Hơn nữa bạn có thể thực hiện PriorityOrdered để đảm bảo một trong những người nghe của bạn luôn được gọi đầu tiên.

+0

Có thể đơn đặt hàng bị bỏ qua cho người nghe sự kiện xác thực không? Tôi đã có 'CustomAuthListener triển khai ApplicationListener , Ordered', nhưng' return LOWEST_PRECEDENCE' chưa bao giờ được gọi. May thay tôi chỉ phải nghe 'InteractiveAuthenticationSuccessEvent' thay vì' AuthenticationSuccessEvent' để sửa lỗi của tôi. –

Các vấn đề liên quan