在 3.0.0.0 正式版后支持全新的 Before 和 After 的 RouteHandler 机制,任意注解只要在里面声明 @Before 或者 @After 并且声明了对应的实现处理类,那么路由会自动根据是 Before 还是 After 实现类似 AOP 的拦截机制。
比如我们看下 eventbus 这个插件的 @AfterEvent 的实现:
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION)
@MustBeDocumented
@After(invokeBy = [AfterEventRouteHandler::class])
annotation class AfterEvent(val value: Array<String> = [])
在 AfterEvent 中声明 @After 以及具体的执行者。
class AfterEventRouteHandler : RouteHandler {
override suspend fun handle(annotation: Annotation, resource: Resource): Boolean {
val afterAnnotation = annotation as AfterEvent
afterAnnotation.value.forEach { address ->
EventBusManager.send(address = address, message = JsonObject(resource.context.data()))
}
return true
}
}
那么在声明了 @AfterEvent 路由方法执行完后会自动调用 AfterEventRouteHandler,从而实现自动发送事件。
@Before 也是类似的用法。