2012-02-04 31 views
8

Gerçekten ne istediğimi açıklamak zor. Bana bir sınıf değişkenleri için tüm çalışma zamanı hata ayıklama bilgilerini sağlayan bir yöntem getRuntimeInfo() olan bir arabirim var. Bu arayüzü uygulayan tüm sınıfların listesini görmek istiyorum. Java ve Spring kullanıyorum. Bunu yapabilmemin tek yolu, tüm çekirdekleri Spring Bağlamından almak ve instanceof operatörünü kullanarak kontrol etmektir. Ancak, açık performans etkileri için bunu yapmak istemem. Başka seçeneğim var mı?Belirli bir arabirimi uygulayan tüm sınıfları takip edin?

cevap

13

Ne:

@Component 
public class WithAllMyInterfaceImpls { 

    @Autowire 
    List<MyInterface> allBeansThatImplementTheMyInterface; 

} 

Liste sadece() başlatmak seferde doldurulur böylece "normal" çalışma zamanı performansında önemli bir etkiye sahip olmamalıdır.


Yorum:

sen Sen Bahar bir IOC Konteyner olduğunu biliyoruz kodunuzu

açıklayabilir. @Component, Spring'e bu sınıfın bir örneğini (Spring Managed Bean olarak adlandırılır) oluşturması gerektiğini söyler. IOC, aynı zamanda, Konteyner'in diğer örneklere (Spring Managed Beans) referanslar enjekte etmesinden sorumlu olduğu anlamına gelir. @Autowire (@Resource ve @Inject - hepsi aynıdır), Spring'e bu alanın Spring tarafından doldurulması gerektiğini söyleyen bir açıklamadır. Bahar, alanın hangi popülasyonlarda olması gerektiğini anlamaya çalışır. Yay kullanan varsayılan bir teknik by type şeklindedir. Bu, Spring'in alanın türünü incelemesi ve eşleşen çekirdekleri araması anlamına gelir. Senin durumunda, genel bir Liste - bu biraz özel. Bu durumda Bahar, alanı, jenerik türle eşleşen tüm çekirdeklerin olduğu bir listeyle doldurur.

+0

Sadece normal yay otomatik kablolama özelliğidir, özel bir şey yoktur. Sadece çekirdek yay özelliği – Ralph

+0

@ user1117398: Cevabımı biraz açıklamak için uzattım. - İlkbahar 3.0 okumalısın gibi görünüyor! veya 3.1 öğretici. – Ralph

İlgili konular