![](/img/trans.png)
[英]What's the difference between code inside finally block and code after finally block?
[英]What's the difference between @After and @Finally annotations for Play controllers
文档对此不是很清楚。 有人可以阐明这两者之间的差异吗?
@After
- 在对此Controller的每个动作调用之后执行使用@After注释注释的方法。
@Finally
- 在为此Controller应用每个操作结果后,将执行使用@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
这清楚地显示了处理的顺序,以及输出到HTTP Response对象的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.