2011-12-07 4 views
11

Yayında yeniyim ve şu anda projelerimden birinde kullanıyorum. Bahar kabının tüm fasulyeleri tuttuğunu ve tüm fasulyelerin kapsamının varsayılan olarak tekil olduğunu öğrendim. Kapsamı application-context.xml dosyasında veya annsptation @scope'u kullanarak değiştirebilirim.Spring bean container'taki kapsam ve çöp toplama ile ilgili olarak

Artık sorum şu: "prototip" olarak sınıfın kapsamı varsa, bahar konteyneri her seferinde yeni bir nesneyi başlatır. Şimdi, çöp toplama nasıl ele alınır. Nesneler artık kullanılmadığında toplanacak mı yoksa hala konteynerde asılı kalacak mı? Çünkü her seferinde bir çok nesnenin yaratılmasını istemiyorum, bu yüzden bir tane ihtiyacı var ve belleği yüklüyor. Birisi bunu anlamamda bana yardımcı olun lütfen. Teşekkürler.

cevap

1

Kap, örneklenmiş çekirdeklere referans göstermez, bunları kullanan kod yapar.

Fasülye başka hiçbir şey referans göstermezse (kabaca), GC için uygundur. Bahar belgeleri

+0

Hızlı yanıt için çok teşekkür ederiz – ravi

22

(3.5.2 The prototype scope):

diğer kapsamları aksine

Spring bir prototip fasulye tüm kullanım ömrü yönetmek değildir: kap, aksi takdirde başlatır yapılandırır ve bir prototip nesnesi bir araya ve numaralı prototip örneğinin daha fazla kaydı olmadan istemciye uzatır.

Basitçe söylemek gerekirse - oluşturmak ve prototype fasulye kapsamlı bir referans elde kez, bu JVM mevcut tek referanstır. Bu referanslar kapsam dışı girer girmez, nesne çöp toplanan olacaktır:

void bar() { 
    Object foo = ctx.getBean("foo") 
} 

an bar() yöntemini terk çöp toplama işlemi için uygun olduğu anlamına gelir foo yeni örneğine, başka bir referanslar yok. Bu modelin sonucudur: Böylece

, başlatma yaşam döngüsü geri arama yöntemleri yapılandırılmış imha yaşam döngüsü geri çağırma adı değildir olan, prototip durumunda ne olursa olsun, kapsamı, tüm nesneler üzerinde adlandırılır, ancak.

+0

Teşekkür ederim .. bu yardımcı oldu – ravi