在 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 AfterEventafterAnnotation.value.forEach { address ->EventBusManager.send(address = address, message = JsonObject(resource.context.data()))}return true}}
那么在声明了 @AfterEvent 路由方法执行完后会自动调用 AfterEventRouteHandler,从而实现自动发送事件。
@Before 也是类似的用法。
