2011-12-23 23 views
14

Ben bir prototip fasulye örneklerini oluşturan bir yöntemi olan bir tek fasulye var. Prototip fasülyesi örneklerini almak için documented here yöntemini kullanıyorum. 'Go' yöntemi örneği başvuramaz olurdu ve çöp toplanan olacağını, yani döndüğündeSpring - Prototip kapsamlı fasülyemi nasıl yok edebilirim?

public class SingletonService implements ApplicationContextAware { 

    private ApplicationContext applicationContext; 

    public void go() { 

     MyPrototypeBean prototype = applicationContext 
      .getBean(MyPrototypeBean.class); 

     prototype.doSomething(); 
    } 

    @Override 
    public void setApplicationContext(ApplicationContext applicationContext) 
     throws BeansException { 

     this.applicationContext = applicationContext; 
    } 
} 

İlk başta bu 'prototip' benim örnek kapsam dışında gideceğini, yeterince iyi olduğunu düşündüm .

Ancak, akran the documentation aşağıdaki ifadeyi işaret:

istemci kodu prototip-kapsamlı nesneleri temizlemek ve prototip fasulye (ler) tutan pahalı kaynakları serbest olmalıdır.

Yani Bahar bir referansı koruyacak gibi görünüyor ve bu yüzden gc hiçbir zaman onu almayacak? Eğer durum buysa, Spring'e referansı serbest bırakmasını nasıl söyleyebilirim? Dokümantasyonda 'özel fasülyeli post-işlemci' kullanabileceğime inanıyorum, ancak bu işlemcinin nereye sığacağı ve hangi kodun çalışacağı net değil. Tüm yardım için şimdiden

sayesinde Roy

cevap

12

Sana belgelerine yanlış anlıyorsun düşünüyorum. Sadece Spring'in prototip fasulyesinin yaşam döngüsünü yönetmeyeceğini söylüyorsunuz, bu yüzden @PreDestroy (vb) yöntemlerinin kendi kodunuz tarafından çağrılması gerekiyor. İlkbahar bir referansı korumaz.

+0

Teşekkürler Sanat - bu yüzden yukarıdaki kodun yeterli olduğunu ve bellek sızıntısının sebebi olmayacağını söylemek güvenli mi? –

+1

iyi, bu MyPrototypeBean uygulamasına bağlı, ancak bir Bahar açısından iyi. – artbristol

+0

Fasulyeyi almak için getBean (..) yöntemini kullandınız. Performansları ile çok maliyetli olduğunu anladım. o zaman nasıl geri almalısın? – rayman

İlgili konular