Позвольте мне заключать в кавычки Завершенный Код Steve McConnell. Раздел по Утверждениям 8.2.
Обычно, Вы не хотите, чтобы пользователи видели сообщения утверждения в производственном коде; утверждения, прежде всего, для использования во время разработки и обслуживания. Утверждения обычно компилируются в код во время разработки и компилируются из кода для производства.
Однако позже в том же разделе, этот совет дан:
Для очень устойчивого кода, утверждайте и затем обработайте ошибку так или иначе.
я думаю, что, пока производительность не является проблемой, оставьте утверждение внутри, а скорее, чем дисплей сообщение, имейте ее, пишут в файл журнала. Я думаю, что совет находится также в Завершенном Коде, но я не нахожу его прямо сейчас.
Я хочу, чтобы это был детерминированный шаг (не «когда-нибудь, когда GC запустится»).
Извините, но тогда Java - неподходящий язык для вас. Инфраструктура DI не знает, когда все ссылки на объект исчезли. Только сборщик мусора знает об этом.
Если у вас есть «закрываемый» ресурс, используйте шаблон try / finally, чтобы закрыть его (см. Ниже).
Closable c = // ...
try {
c.use();
} finally {
c.close();
}
Теперь вернемся немного назад. Guice может знать, когда область действия начинается и заканчивается. По завершении ваша настраиваемая область может выполнить этап очистки. Эта область может даже возвращать прокси, поэтому объекты будут недействительными, если вы попытаетесь получить к ним доступ за пределами разрешенной области.
(О, и +1 к ColinD - поставщики инъекций. :)
РЕДАКТИРОВАТЬ : Guiceyfruit швы для поддержки Lifecycles