SORU
11 Kasım 2011, Cuma


Sınıf.() forName vs ClassLoader.() loadClass dinamik yükleme için kullanılacak olan?

Dinamik sınıf yükleme ne zaman, ne zaman kullanmak için uygun değil

Class.forName("SomeClass");

ve ne zaman kullanmalıyım

ClassLoader.getSystemClassLoader().loadClass("SomeClass");

Ya da, aynı şeyi yapmanın iki yolu vardır?

CEVAP
11 Kasım 2011, Cuma


Oldukça farklı!

Class.forName(String), belgelerinde belirtildiği gibi

Döner Sınıfın belirli bir dize adı ile sınıf veya arabirim ile ilişkili nesne. Bu yöntem eşdeğerdir çağırma: Class.forName(className, true, currentLoader)

(true burada ifade edersınıf başlatmak istiyor musunuz?)

, 12**: diğer taraftan

Bu yöntem çağırma loadClass(name, false) yürütmesini eşdeğerdir.

(burada, boolean ilgisi yok başlatma; ama eğer kontrol loadClass(String, boolean) belgeleri, göreceksiniz hepsi, mümkün olduğu kadar çok yük sınıfı, başlatılamıyor).

Birincisi (Class.forName("SomeClass");):

  • bu kodu çağıran sınıf yüklenen sınıf yükleyicisi kullanın
  • sınıf (tüm statik başlatıcılar çalışır) başlatılamadı

(**10) Diğer:

  • kullan "sistem" sınıf yükleyicisi (which is overridable)
  • değil sınıf (ki, eğer bu OLANLARI bir sürücü yüklemek için kullanırsanız, kayıtlı bir işe yaramaz, gerekli OLANLARI kullanmak mümkün olmayacaktır!) başlatılamadı

Tomcat gibi bir konteyner üzerinde yürütülen bir web uygulama kodlama varsayalım. Tomcat yaptığı her web uygulaması için bir sınıf yükleyicisi (web uygulamalarını daha sonra boşaltın ve bellek -- yayın edebilir, bu yüzden özel bir sınıf bu iş için loader lazım!) oluşturun. Bu durumda, her iki aramayı da oldukça farklı sonuçlar verecektir görebilirsiniz!

Sınıf yükleme ve başlatma hakkında daha detaylı ve güvenilir bilgi için, kontrol edin Java Dili Belirtimi (3) en son sayı 12.2 12.4 bölümler.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Darren Kitchen

    Darren Kitch

    3 EKİM 2011
  • John Lynn

    John Lynn

    8 Ocak 2010
  • WestsideMrArO

    WestsideMrAr

    6 EKİM 2010