Скажем, у меня есть объект Closeable
, введенный через Guice с использованием области запроса:
@Provides @RequestScoped
public MyCloseableResource providesMyCloseableResource(){
return new MyCloseableResourceImpl();
}
Можно ли подключить метод очистки, который автоматически вызовет close()
на моем ресурсе, когда область существует, не прибегая к реализации пользовательской области видимости?
Глядя на руководство по реализации области в вики Guice, он показывает, что области должны быть созданы и очищены следующим образом:
/**
* 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();
}
}
Мне интересно, есть ли способ подключить какой-то пользовательский код очистки в finally
встроенных областей (особенно области сеанса и запроса).
Если это невозможно, могут возникнуть проблемы, которые препятствовали бы такой автоматической очистке?
Я нашел способы достижения такого же эффекта в контейнерах сервлетов с помощью реализации фильтра для создания и очистки ресурса за запрос, который отлично работает, но я Любопытно, если это возможно с чистым Guice.