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 l'action est exécutée
@After est appelé après que votre contrôleur a terminé son exécution, mais avant que la sortie ne soit rendue au navigateur
@Finalement appelé lorsque les résultats ont été affichés dans le navigateur.
Ainsi, dans la plupart des cas, @After et @finally travaillera pour vous de la même manière, mais n'ont une légère différence, en fonction de votre cas d'utilisation particulière. Cela ne devrait cependant pas faire de différence.
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 que je reçois est comme suit
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 envoyé à l'objet HTTP Response.
Votre comportement peut différer ... @ Enfin, les méthodes sont appelées plus tard que les méthodes @After, ce qui peut affecter le comportement des méthodes. –