SORU
1 Mayıs 2009, Cuma


Neden Bahar'In ApplicationContext.kötü olarak kabul getBean?

Ben genel Bahar bir soru sordu: 18* *ve birden fazla kişi Bahar ApplicationContext.getBean() arıyor mümkün olduğunca uzak durulması gereken bir cevap vardı. Bu yüzden mi?

Başka nasıl Bahar yapılandırılmış fasulye erişim oluşturmak için almak gerekli?

Olmayan bir web uygulamasını kullanarak Bahar ve ** 5, paylaşılan bir nesne erişimini planlı as described by LiorH vardı benim.

Değişiklik

Cevap aşağıda kabul ediyorum, ama burada 20 ** olan Martin Fowler tarafından alternatif bir yaklaşım aslında ApplicationContext.getBean() bir sarılmış arıyorum aynıdır).

Kısmen, Fowler devletler, "Konumlandırıcı hizmeti ile uygulama sınıfı açıkça belirleyicisi mesaj tarafından [hizmet] sorar. Açık bir talep var, hiçbir enjeksiyon, hizmeti, uygulama sınıfı, dolayısıyla kontrol ve telleri görünür. Kontrol çevirme çerçeveleri ortak bir özelliktir, ama bir bedeli olan bir şey. Anlamak zor olma eğilimindedir ve hata ayıklama için çalışırken sorunlara yol açar. Bütün ihtiyacım olmasa bunu önlemek için tercih ediyor [Kontrol İnversion]. Bu kötü bir şey değil, sadece daha basit bir alternatif, kendini aklamak için yeterli olacak demek değildir."

CEVAP
1 Mayıs 2009, Cuma


Diğer soru hakkında bir yorum bahsettim, ama Kontrol Çevirme fikrine sahip olmaktırderslerin hiçbiri bilmiyor veya bağlı oldukları nesneler nasıl bakım. Bu sayede kullandığınız herhangi bir zamanda değiştirmek için yapar. Ayrıca bağımlılıkları alay uygulamaları sağlayabilir gibi dersleri kolay test yapar. Son olarak, sınıflar yapardaha basitve onların temel sorumluluğu üzerinde daha fazla duruldu.

ApplicationContext.getBean() çağrı Kontrolü Ters değil! Hala kolay ağ verilen bean adı için yapılandırılmış değiştirmek için olsa da, artık doğrudan sınıf Bahar bağımlılık sağlamak için kullanır ve başka türlü olamaz. Sadece test bir sınıfta alay uygulamanız ve bunu geçmek için Kendin yapamazsın. Bu temelde bağımlılık enjeksiyon konteyner Bahar amacı yendi.

Her yerde söylemek istiyorum:

MyClass myClass = applicationContext.getBean("myClass");

örneğin, bir yöntem bildirmek gerekir:

public void setMyClass(MyClass myClass) {
   this.myClass = myClass;
}

Ve yapılandırma:

<bean id="myClass" class="MyClass">...</bean>

<bean id="myOtherClass" class="MyOtherClass">
   <property name="myClass" ref="myClass"/>
</bean>

Bahar sonra otomatik olarak myOtherClass myClass enjekte edecektir.

Bu şekilde her şeyi bildirmek, kök gibi bir şey var:

<bean id="myApplication" class="MyApplication">
   <property name="myCentralClass" ref="myCentralClass"/>
   <property name="myOtherCentralClass" ref="myOtherCentralClass"/>
</bean>

MyApplication en çok orta sınıf, ve en azından dolaylı olarak programınızı her hizmete bağlıdır. , main yöntemi önyükleme zaman, applicationContext.getBean("myApplication") ama aramak gerekmez getBean() başka bir yerde arayın!

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Good Creative Academy

    Good Creativ

    19 Kasım 2009
  • thewinekone

    thewinekone

    17 Aralık 2005
  • UCBerkeley

    UCBerkeley

    3 Mayıs 2006