该文档对此并不十分清楚。有人可以照亮这两者之间的差异吗?

@After - 用@Efter注释注释的方法将在此控制器的每个操作调用后执行。

@Finally - 用@Finally注释注释的方法将在此控制器中应用每个操作结果后执行。

@finter在 @finter工作时使用@Fin的性能会损害性能吗?

有帮助吗?

解决方案

如果您写了一个小测试安全带,您将看到它的工作原理,但是它的症结就是这个

  • @Before在执行操作之前被调用

  • 在您的控制器完成执行后,但是在输出渲染到浏览器之前, @ofter被调用。

  • 当结果已发布到浏览器时, @finally被调用。

因此,在大多数情况下, @ @ferter和@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响应对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top