ドキュメントはこれについてあまり明確ではありません。誰かがこれら2つの違いを明らかにできますか?
@After
- @After アノテーションが付けられたメソッドは、このコントローラーの各アクション呼び出しの後に実行されます。
@Finally
- @Finally アノテーションが付けられたメソッドは、各アクションの結果がこのコントローラーに適用された後に実行されます。
@After が機能するときに @Finally を使用すると、パフォーマンスが低下しますか?
ドキュメントはこれについてあまり明確ではありません。誰かがこれら2つの違いを明らかにできますか?
@After
- @After アノテーションが付けられたメソッドは、このコントローラーの各アクション呼び出しの後に実行されます。
@Finally
- @Finally アノテーションが付けられたメソッドは、各アクションの結果がこのコントローラーに適用された後に実行されます。
@After が機能するときに @Finally を使用すると、パフォーマンスが低下しますか?
小さなテストハーネスを書くと、これがどのように機能するかがわかりますが、その核心はこれです
@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
これは、処理の順序と、HTTPResponseオブジェクトに出力されるデータを明確に示しています。