Talep kapsamını kullanarak Guice ile enjekte edilen bir Closeable
nesnesinin olduğunu düşünelim:Guice'de kapsamın sonunda kaynakların otomatik olarak temizlenmesi mümkün mü?
@Provides @RequestScoped
public MyCloseableResource providesMyCloseableResource(){
return new MyCloseableResourceImpl();
}
Kapsam mevcut olduğunda, kaynak mevcut olduğunda close()
'u otomatik olarak arayacak bir temizleme yönteminin kullanılması mümkün mü? özel kapsam uygulaması?
Guice wiki üzerindeki scope implementation guide modeline baktığımızda, bu kapsamın şu şekilde oluşturulup temizlendiğini gösteriyor:
/**
* Runs {@code runnable} in batch scope.
*/
public void scopeRunnable(Runnable runnable) {
scope.enter();
try {
// explicitly seed some seed objects...
scope.seed(Key.get(SomeObject.class), someObject);
// create and access scoped objects
runnable.run();
} finally {
scope.exit();
}
}
Bazı özel temizlemeleri yapmanın bir yolu olup olmadığını merak ediyorum. Yerleşik kapsamların finally
'ındaki kodu (özellikle oturum ve istek kapsamları).
Mümkün değilse, bu tür otomatik temizlemeyi engelleyen sorunlar olabilir mi?
implementing a Filter ile aynı etkiyi elde etmenin yollarını, istek başına bir kaynak oluşturmak ve temizlemek için yollar buldum, bu harika çalışıyor ancak saf Guice ile muhtemelen merak ediyorum.
Genişletilebilir bir kapsam uygulaması, çok iyi bir fikir! Bu nedenle, istek kapsamı ile kullanabilmek için, 'MyRequestScope'unu kapsam sınıfınızı blog'undan genişletecek, varsayılan 'RequestScope'la aynı yere bağlayacağım (zor kısmı),' scope.enter()' ile AbstractAttributeHolder' ve 'dispose() 'olarak adlandırdığımdan son olarak (veya' MyRequestScope'un 'exit()') emin olun? Eğer bunu entegre etmenin güzel bir yolu varsa, bunu paylaşır mısınız (kod ve/veya teknikler) lütfen? – rodion
Senkronizasyonla ilgili kodla ilgili olarak, "AttributeHolder" öğesine her zaman ThreadLocal'den erişildiği için gereksizdir çünkü her iş parçacığı için benzersiz bir örnek. Bir şey mi eksik? – rodion
1) Bunu bir Servlet ortamında kullanmıyorum, dolayısıyla bunu nasıl düzgün yapacağımı bilmiyorum. – Waldheinz