调用 REST API 的自定义 Java 注释

Custom Java annotation that calls a REST API

我想创建一个 Java 注释 @Ping,它向我部署在 Docker 容器中的 REST API 发送 POST 请求.

到目前为止,我创建了这个注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Ping {
    String endpoint();
}

如您所见,我希望此注释基于方法。此方法将允许我为我的其他服务提供状态(可用或不可用)。

我还想将此代码作为 Maven 工件存储在我自己的存储库中,我将在其中添加更多注释,以便我可以在我的其他服务中使用它。

我看过几个教程,但无法弄清楚如何将这种行为具体化,而且我一开始也无法让它发挥作用。

据我了解,现在我需要一个包含逻辑的处理程序(即向我的 API 发送 POST 请求),但我不确定该怎么做。 你有机会帮助我开始吗?注释是做这样的事情的好主意吗?

谢谢!

创建方法级注解并使用 AOP 编写将调用您的其余部分的逻辑 api

@Around("execution(@Ping * *(..))")
public void entr(ProceedingJoinPoint joinPoint) throws Throwable {
 System.out.println("before method");
 joinPoint.proceed();
 System.out.println("after method");
}

为了添加到@Urvil Joshi 的回答中,考虑到我不想添加 Spring 依赖项,我创建了一个包含以下内容的 PingAspect.aj 文件:

public aspect PingAspect {

    pointcut hasPingAnnotation(Ping ping): @annotation(ping);

    pointcut execute() : execution(* * (..));

    Object around(Ping ping) : execute() && hasPingAnnotation(ping) {
        System.out.println("Before method execution");
        String endpoint = ping.endpoint();
        System.out.println("Endpoint = " + endpoint);
        Object result = proceed(ping);
        System.out.println("After");
        return result;
    }
}

与 ajc 编译器完美配合! 希望能帮到你