SORU
16 EKİM 2013, ÇARŞAMBA


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
17 EKİM 2013, PERŞEMBE


@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:

  1. İyi uygulama Bahar özgü ve part of the JSR-330 standard çünkü @Autowired yerine @Inject kullanmak olacaktır.
  2. Başka iyi bir pratik bir yöntem yerine bir kurucu üzerinde@Inject / @Autowired bu koymak olurdu. Eğer bir kurucu, doğrulayan enjekte fasulye değil null ve başarısız hızlı çalışan uygulama ve önlemek NullPointerException ne 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Codecourse

    Codecourse

    3 ŞUBAT 2009
  • MatheusDosGames

    MatheusDosGa

    28 Aralık 2011
  • Rugiagialia

    Rugiagialia

    1 Ocak 2008