Если вы напишете небольшой тестовый жгут, вы увидите, как это работает, но суть его такова
@ До вызова до того, как вы выполните действие
@ After вызывается после того, как контроллер завершил свое выполнение, но до того, как вывод будет отображен в браузере
@ Наконец, вызывается, когда результаты былиотправлено в браузер.
Так что в большинстве случаев @After и @Finally будут работать для вас одинаково, но с небольшой разницей, в зависимости от вашего конкретного варианта использования,Однако это не должно иметь никакого значения для производительности.
Испытательный комплект, который я написал, чтобы доказать это, выглядит следующим образом
public class Application extends Controller {
@Before
static void log0() {Logger.info("before: "+ response.out.size());}
@After
static void log1() {Logger.info("After: "+ response.out.size());}
@Finally
static void log2() {Logger.info("finally: "+ response.out.size());}
public static void index() {
Logger.info("in index action");
render();
}
}
Вывод, который я получаю, выглядит следующим образом
20:51:37,741 INFO ~ before: 0
20:51:37,742 INFO ~ in index action
20:51:38,083 INFO ~ After: 0
20:51:38,106 INFO ~ finally: 706
, который четко показывает порядок обработки и данные, выводимые в объект HTTP-ответа.