SORU
6 Ocak 2013, Pazar


Bahar ApplicationContext - Kaynak sızıntısı: '' asla kapalı bağlam

Spring MVC uygulamasında, hizmet sınıfları aşağıdaki yaklaşım kullanarak bir değişkeni ben başlatılamıyor:

ApplicationContext context = 
         new ClassPathXmlApplicationContext("META-INF/userLibrary.xml");
service = context.getBean(UserLibrary.class);

Bu UserLibrary uygulamam kullanıyorum hangi 3. parti bir araçtır. Yukarıdaki kod oluşturur için bir uyarı 'bağlam' değişken. Uyarı aşağıda gösterilmiştir:

Resource leak: 'context' is never closed

Uyarı anlamıyorum. Uygulama Spring MVC uygulaması olarak, çok yakın bir uygulama çalışırken servisine sevk as/bağlam yok edemiyorum. Tam olarak bu uyarı bana ne anlatmaya çalışıyor?

CEVAP
6 Ocak 2013, Pazar


Uygulama kapsamında olduğundan bir noktada serbest olması için gereken kaynak tüketir ResourceLoader (/Ç işlemleri yani ben). Ayrıca Closable uygulayan AbstractApplicationContext bir uzantısıdır. Böylece, close() bir yöntem var ve try-with-resources statement kullanılabilir.

try (ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/userLibrary.xml")) {
  service = context.getBean(UserLibrary.class);
}

Aslında farklı bir soru (size bağlı) bu içerik oluşturmak için ihtiyacınız olsun, bu konuda yorum yapmayacağım.

Bu bağlamda uygulama durdurulduğunda örtülü kapalı olduğu doğrudur ama bu yeterli değil. Eclipse haklı, classloader sızıntıları önlemek için el ile diğer durumlarda kapatmak için önlemler almak gerekir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Adams

    Bryan Adams

    30 Mart 2006
  • Ownage Pranks

    Ownage Prank

    13 AĞUSTOS 2007
  • SRT Photoshop Tutorials

    SRT Photosho

    19 Aralık 2012