文档对此不是很清楚。有人可以阐明这两者之间的区别吗?
@After
- 使用 @After 注释注释的方法在此控制器的每个操作调用后执行。
@Finally
- 使用@Finally 注释注释的方法在为此控制器应用每个操作结果后执行。
当@After 起作用时使用@Finally 会损害性能吗?
文档对此不是很清楚。有人可以阐明这两者之间的区别吗?
@After
- 使用 @After 注释注释的方法在此控制器的每个操作调用后执行。
@Finally
- 使用@Finally 注释注释的方法在为此控制器应用每个操作结果后执行。
当@After 起作用时使用@Finally 会损害性能吗?
如果你写一个小测试工具,你会看到它是如何工作的,但关键是这个
@Before 在您执行操作之前调用
@After 在你的控制器完成执行之后调用,但在输出呈现给浏览器之前
当结果发布到浏览器时调用@Final。
所以在大多数情况下,@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 响应对象的数据。