AOP-根据建议取消或跟随执行



我正在编写一个注释,该注释应该在执行函数之前对MessageId执行一些验证。

@Aspect
@Component
class ValidatorAspect {
@Before("@annotation(whatever.Validator)")
fun checkMessage(joinPoint: JoinPoint) {
val messageId = joinPoint.args[1] as String
// run some validations
// if any validation fails, this should stop execution
// and annotated function not be called
}
}

我的函数注释为:

@Validator
@SqsListener("myqueue")
fun run(message: String) {
// code to proccess message
}

顺序被正确调用:首先SqsListener接收消息,然后我的验证器应该在注释函数之前执行。

如何从run()强制停止执行?如果任何验证失败,我不希望调用那个带注释的类——此外,我不想抛出异常,我正在寻找平滑的东西,只是停止,没有异常:(

我曾尝试使用@Around,但我的建议是在我的函数run()之后调用的

有什么想法或建议吗?

@Before中,如果您想阻止程序进入截获的方法,您别无选择,只能抛出异常。显然,您希望避免抛出异常,因此@Around是您希望在此处使用的建议类型。

我曾尝试使用@Around,但我的建议是在我的函数run()之后调用的

恕我直言,这是不可能的。您可以在调用连接点之前访问它,这就是它的工作方式。也许您在进行验证之前不小心调用了joinpoint.proceed()。当然,您必须以另一种方式进行,首先进行验证,然后决定是要继续,还是只返回一个替代结果而不继续。

相关内容

  • 没有找到相关文章

最新更新