В чем разница между аннотациями @After и @finally для игровых контроллеров

StackOverflow https://stackoverflow.com/questions/4091006

Вопрос

Документация не очень поняла на этом. Может кто-нибудь освещать различия между этими двумя?

@After - методы, аннотированные с аннотацией @After, выполняются после каждого вызова действия этого контроллера.

@Finally - методы, аннотируемые с аннотацией @finally, выполняются после того, как каждый результат действий применяется из этого контроллера.

Это повредит производительностью для использования @finally, когда @After будет работать?

Это было полезно?

Решение

Если вы пишете небольшой тестовый жгут, вы увидите, как это работает, но суть именно это

  • @BEFORE вызывается до выполнения действий

  • @After вызывается после завершения вашего контроллера, но до того, как вывод будет отображаться в браузере

  • @Finally называется, когда результаты были размещены в браузере.

Таким образом, в большинстве случаев @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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top