2010-12-30 36 views
12
@Service @Order(1) 
public class FooService implements IService {..} 

@Service @Order(2) 
public class BarService implements IService {..} 

aşağıdaki listede sırası daima {FooService, BarService} olacağını garanti ediliyor fasulye tanımlı sipariş aynıdır (aynı soru, xml yapılandırması için geçerli), sipariş listesinde

+1

kapsayacak şekilde genişletilmiştir kaynak kod, ama orada oldukça korkutucu ve yeterince takip edemiyorum. Yine de cevabın "evet" olduğundan şüpheleniyorum. – skaffman

+0

@skaffman En mantıklı davranış olan ve bu konuda baharın her zamanki 'politikası' olan “evet” ten de şüpheleniyorum. Ama bir kanıt bulmaya çalışacağım :) – Bozho

+0

@skaffman - bu bizim beklentilerimizin yanlış olduğunu gösteriyor;) (bkz. Axtavt'ın yanıtı ve yorumları aşağıda) – Bozho

cevap

11

Sanırım hayır, çünkü @Order genel amaçlı bir ek açıklama değildir. javadoc:

NOT: Ek açıklama tabanlı sipariş yalnızca belirli türdeki bileşenler için desteklenir, örn. ek açıklama tabanlı AspectJ yönleri için. Diğer taraftan, kapsayıcı kapsayıcı stratejiler, her bir örneğin yapılandırılabilir sıralamasına izin vermek için tipik olarak Sipariş edilen ara yüze dayanır.

Ayrıca beans ve context modüllerin kaynağı org.springframework.core.annotation.Order ve AnnotationAwareOrderComparator hiçbir oluşumları vardır.

beklendiği gibi bu davranmasına yapmak için basit bir yoludur:

@PostConstruct 
public void init() { 
    Collections.sort(services, AnnotationAwareOrderComparator.INSTANCE); 
} 
+0

Ve böylece, eğer 'Sipariş Edildi' uygularsam Listede uygun şekilde sipariş verilsin mi? – Bozho

+0

@Bozho: Sanırım "Sipariş Edildi" de yardım edemez - OrderComparator gibi sadece post işleyiciler gibi özel fasülyeler sipariş etmek için kullanılır. – axtavt

+0

Test edildi ve test size doğru olduğunu kanıtladı. Cevabı kabul etti ve buna bir çözüm ekledi (eğer buna katılmıyorsanız onu kaldırmaktan çekinmeyin :)). – Bozho

3

Bahar 4'ün sunulduğundan beri, @Order kullanımı sadece Bahar ile bu izleme çalıştı @Component