Pregunta

La documentación no es muy claro en esto. Alguien puede iluminar las diferencias entre estos dos?

@After -. Métodos anotado con la anotación @After se ejecutan después de cada llamada acción para este controlador

@Finally -. Métodos anotado con la anotación @Finally se ejecuta después de cada resultado de la acción se aplica a partir de este Controller

¿Le duele el rendimiento al utilizar @Finally cuando @After funcionaría?

¿Fue útil?

Solución

Si se escribe un pequeño instrumento de prueba, verá cómo funciona este, pero el quid de la cuestión es este

  • @Before se llama antes de que éste se ejecuta la acción

  • @After se llama después de que su controlador ha completado su ejecución, pero antes de la salida se vuelve al navegador

  • @Finally se llama cuando los resultados han sido publicados en el navegador.

Así que en la mayoría de los casos, @After y @Finally trabajará para usted de la misma manera, pero tienen una ligera diferencia, dependiendo de su caso de uso particular. No debería haber ninguna diferencia en el rendimiento sin embargo.

El instrumento de prueba que escribí para probar esto, es el siguiente

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();
    }
}

El I get salida es la siguiente

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

que muestra claramente el orden de procesamiento y los datos que se emiten a la del objeto de respuesta HTTP.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top