Question

La documentation est pas très claire sur ce point. Quelqu'un peut-il éclairer les différences entre ces deux?

@After -. Méthodes annotés avec l'annotation @After sont exécutées après chaque appel d'action pour ce contrôleur

@Finally -. Méthodes annotés avec l'annotation @finally sont exécutées après chaque résultat de l'action est appliquée à partir de ce contrôleur

Ne serait-il nui au rendement à utiliser @finally quand @After fonctionnerait?

Était-ce utile?

La solution

Si vous écrivez un petit harnais de test, vous verrez comment cela fonctionne, mais le point crucial de c'est ce

  • @Before est appelée avant action est exécutée

  • @After est appelée après que le contrôleur a terminé son exécution, mais avant que la sortie est rendu au navigateur

  • @finally est appelée lorsque les résultats ont été affichés dans le navigateur.

Ainsi, dans la plupart des cas, travaillera pour vous @After et @finally de la même manière, mais n'ont une légère différence, en fonction de votre cas d'utilisation particulière. Il ne doit pas cependant faire une différence à la performance.

Le harnais de test que j'ai écrit pour le prouver, est la suivante

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

La sortie I get est la suivante

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

Ce qui montre clairement l'ordre de traitement, et les données en sortie au l'objet de réponse HTTP.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top