2010-11-03 93 views
4

的文檔是不是對這個很清楚@After和@Finally註釋之間的差異。有人可以闡明這兩者之間的差異嗎?什麼是對遊戲控制器

@After - 與@After註解的方法每個動作呼籲該控制器之後執行。

@Finally - 方法與@Finally註解的每個操作的結果從該控制器施加之後被執行。

會疼性能@Finally使用時@After會的工作?

+0

你的行爲可能會有所不同... @最後的方法被調用遲於@After方法做,這可能會影響這些方法的行爲。 – 2010-11-03 19:59:55

回答

12

如果你寫一個小的測試工具,你會看到這是如何工作的,但問題的癥結所在是這

  • 執行你行動之前

  • @After @Before被稱爲是所謂後您的控制器完成其執行,但在此之前的輸出呈現給瀏覽器

  • 當結果已經發布到瀏覽器@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響應對象。