是否可以在方法结束时执行操作,换句话说,当函数控制使用注释返回给调用者(由于异常或正常返回)时?
例子:
@DoTaskAtMethodReturn
public void foo() {
.
.
.
Method foo Tasks
.
.
.
return; --------> Background task done by annotation hook here before returning to caller.
}
是否可以在方法结束时执行操作,换句话说,当函数控制使用注释返回给调用者(由于异常或正常返回)时?
例子:
@DoTaskAtMethodReturn
public void foo() {
.
.
.
Method foo Tasks
.
.
.
return; --------> Background task done by annotation hook here before returning to caller.
}
您的问题被标记为Spring-Annotations,因此您显然正在使用 Spring。有几个步骤可以用 Spring 做你想做的事情:
<aop:aspectj-autoproxy/>
编写一个使用切入点的方面(参见Spring AOP vs AspectJ):@After
@annotation
@Aspect
public class TaskDoer {
@After("@annotation(doTaskAnnotation)")
// or @AfterReturning or @AfterThrowing
public void doSomething(DoTaskAtMethodReturn doTaskAnnotation) throws Throwable {
// do what you want to do
// if you want access to the source, then add a
// parameter ProceedingJoinPoint as the first parameter
}
}
请注意以下限制:
简短的回答是“是的,有可能”。这是所谓的面向方面编程 (AOP) 的一部分。基于注解的 AOP 的一个常见用途是@Transactional,用于将所有数据库活动包装在一个事务中。
你如何处理这取决于你正在构建什么,你正在使用什么(如果有的话)框架等。如果你使用 Spring 进行依赖注入,这个SO answer有一个很好的例子,或者你可以查看Spring 文档. 另一种选择是使用 Guice(我的偏好),它允许简单的 AOP。