我正在编写一个注释,该注释应该在执行函数之前对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()
。当然,您必须以另一种方式进行,首先进行验证,然后决定是要继续,还是只返回一个替代结果而不继续。