在 3.0.0.0 正式版后支持全新的 Before 和 After 的 RouteHandler 机制,任意注解只要在里面声明 @Before 或者 @After 并且声明了对应的实现处理类,那么路由会自动根据是 Before 还是 After 实现类似 AOP 的拦截机制。

    比如我们看下 eventbus 这个插件的 @AfterEvent 的实现:

    1. @Retention(AnnotationRetention.RUNTIME)
    2. @Target(AnnotationTarget.FUNCTION)
    3. @MustBeDocumented
    4. @After(invokeBy = [AfterEventRouteHandler::class])
    5. annotation class AfterEvent(val value: Array<String> = [])

    在 AfterEvent 中声明 @After 以及具体的执行者。

    1. class AfterEventRouteHandler : RouteHandler {
    2. override suspend fun handle(annotation: Annotation, resource: Resource): Boolean {
    3. val afterAnnotation = annotation as AfterEvent
    4. afterAnnotation.value.forEach { address ->
    5. EventBusManager.send(address = address, message = JsonObject(resource.context.data()))
    6. }
    7. return true
    8. }
    9. }

    那么在声明了 @AfterEvent 路由方法执行完后会自动调用 AfterEventRouteHandler,从而实现自动发送事件。

    @Before 也是类似的用法。