3.5 钩子

这里我们叫钩子,可能做java的人对这个词比较陌生,你可以理解为拦截器(其实都是一个意思)。之前的小节里已经介绍中间件,中间件的概念也是在钩子的基础之上做了简化,一个 webhook(钩子)会拦截路由逻辑执行 , ,中间件总是在路由逻辑执行前做一些操作。

注册钩子

你可以实现 WebHook 接口,并在实现类上加一个 @Bean 注解表示该类被IOC容器扫描。

  1. @Bean
  2. public class Hook1 implements WebHook {
  3. @Override
  4. public boolean before(Signature signature) {
  5. System.out.println("进入web hook1");
  6. return signature.next();
  7. }
  8. }

我们来看看 WebHook 接口是如何定义的:

  1. @FunctionalInterface
  2. public interface WebHook {
  3. boolean before(Signature signature);
  4. default boolean after(Signature signature) {
  5. return true;
  6. }
  7. }

这里用了Java8的函数式方法,并提供一个默认的after执行,如果重写after方法则在路由执行后调用。
这里 WebHook 的返回值决定了本次请求是否继续向下调用,为true则放过,返回false则中断请求。