Anlayış Bahar @Autowired kullanımı
Bahar sitesi Bahar Autowired açıklama anlamak için okuyorum:
http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation
3.9.2 @@Enjekte Autowired
Aşağıda örnekler, anlamak mümkün değil. Bu iş için XML bir şey yapmaya gerek var mı?
ÖRNEK 1
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Autowired
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// ...
}
ÖRNEK 2
public class MovieRecommender {
private MovieCatalog movieCatalog;
private CustomerPreferenceDao customerPreferenceDao;
@Autowired
public void prepare(MovieCatalog movieCatalog,
CustomerPreferenceDao customerPreferenceDao) {
this.movieCatalog = movieCatalog;
this.customerPreferenceDao = customerPreferenceDao;
}
// ...
}
Nasıl iki sınıf aynı arayüzü uygulayan autowired ve aynı sınıfı kullanılarak yapılabilir?
Exmaple:
class Red implements Color
class Blue implements Color
class myMainClass{
@Autowired
private Color color;
draw(){
color.design();
}
}
Hangi tasarım yöntemi çağrılır? Nasıl Kırmızı sınıf tasarım yöntemi olarak adlandırılan ve Mavi olacak mı?
CEVAP
@Autowired ek açıklama yapılandırmaları başka bir yere enjekte etmek için ne atlamasını sağlar ve sadece sizin için yok. Paketiniz üstleniyor XML bu etiketi koymak zorunda com.mycompany.movies (uygulama kapsamında dosyası):
<context:component-scan base-package="com.mycompany.movies" />
Bu etiketi otomatik tarama yapacağız. Varsayarsak her sınıf sahip olmak için fasulye açıklamalı ile doğru bir açıklama gibi @Component (basit bean) veya @Controller (sunucu kontrol) ya da @Repository (DAO sınıfları ve bu sınıfların altında bir yerde paketi com.mycompany.movies İlkbahar-ecek bulmak tüm bu ve oluşturmak fasulye için her biri. Bu yapıldığı 2 taramaları sınıflar - ilk kez sadece aramalar için sınıflar ihtiyaç haline fasulye ve haritalar enjeksiyon ihtiyacı var gibi davranıyor ve ikinci tarama enjekte fasulye. Tabii ki, @Configuration bir sınıf ile daha geleneksel bir XML dosyası veya bir salata ya da üç herhangi bir kombinasyonu) tanımlayabilirsiniz.
@Autowired ek açıklama enjeksiyon gerçekleşmesi için gereken Bahar söyler. Eğer 20 ** bir yöntem koyarsan fasulye enjekte edilmesi gereken anlar (önek set @Autowired ek açıklama). İkinci tarama, İlkbahar MovieFinder ve eğer böyle bean bulursa, bu yönteme bırakmaktadır tür fasulye arar. Eğer böyle iki fasulye bulursa Exception alacak. Exception, @Qualifier ek açıklama kullanın ve aşağıdaki şekilde enjekte etmek için hangi söyleyebilirsiniz: önlemek için
@Qualifier("redBean")
class Red implements Color {
// Class code here
}
@Qualifier("blueBean")
class Blue implements Color {
// Class code here
}
Ya eÄŸer XML fasulye ilan etmek isterseniz, bu gibi bir ÅŸey olurdu:
<bean id="redBean" class="com.mycompany.movies.Red"/>
<bean id="blueBean" class="com.mycompany.movies.Blue"/>
@Autowired bildiriminde da @Qualifier enjekte söylemek eklemek gerekir:
@Autowired
@Qualifier("redBean")
public void setColor(Color Color) {
this.color = color;
}
Eğer iki ek açıklamalar (@Autowired @Qualifier) kullanmak istemiyorsanız eğer. @Resource bu iki birleştirmek için kullanabilirsiniz:
@Resource(name="redBean")
public void setColor(Color Color) {
this.color = color;
}
@Resource (Bu cevap üzerine beşinci yorum bu konuda bazı ek veri okuyabilirsiniz) iki ek açıklamalar kullanımını yedek parça ve sadece bir yerine kullanın.
Sadece iki yorum daha ekleyeceÄŸim:
- İyi uygulama Bahar özgü ve part of the
JSR-330standard çünkü@Autowiredyerine@Injectkullanmak olacaktır. - Başka iyi bir pratik bir yöntem yerine bir kurucu üzerinde
@Inject/@Autowiredbu koymak olurdu. Eğer bir kurucu, doğrulayan enjekte fasulye değil null ve başarısız hızlı çalışan uygulama ve önlemekNullPointerExceptionne zaman yapman gerektiğini aslında fasulye.
Yani, miktar: @Autowired açıklama size yedek parça ihtiyacı için kablolarla kendine XML dosyası (veya başka bir şekilde) ve sadece bulduğu için ne gerekiyor doldurulduğu ve yapar.
Güncelleme: Resmi tamamlamak için, @Configuration sınıfı new question bir ben yarattım.

Bahar @Autowired kullanımı...
Neden benim Bahar @Autowired alan boÅŸ ...
@Statik alan Autowired. Bahar 2.5...
ColorMatrix Kullanımı anlayış ve Drawa...
@Enjekte arasındaki fark @Bahar Çerçev...