Как определить pointcut для @FeignClient в весеннем проекте
У меня есть простой симулятор, как показано ниже
@FeignClient(name="xxx")
public interface XXXServiceClient {
@RequestMapping(value = "/foo/bar", method = RequestMethod.POST)
public ResponseEntity<XXX> doSomething(@RequestBody XXX args);
}
То, что я хочу, это определить основанный на пружине pointcut и Before advice. Я могу определить pointcut для классов с конкретной аннотацией, но это не работает для feignclient интерфейсов.
пример
@Pointcut("within(@org.springframework.stereotype.Controller *)")
public void controllerMethods() {}
@Before("controllerMethods()")
public void controllerMethodsBeforeAdvice(JoinPoint pjp) {
System.out.println("Working");
}
@Pointcut("within(@org.springframework.cloud.netflix.feign.FeignClient *)")
public void feignClientMethods() {}
@Before("feignClientMethods()")
public void feignClientMethodsBeforeAdvice(JoinPoint pjp) {
System.out.println("Not working");
}
1 ответ
То, что я пытался сделать с аспектом, это добавить собственный журнал с моими собственными правилами. Как уже упоминалось выше, я не смог добавить aop pointcut. Можно включить симуляцию клиентских логов, но в моей ситуации этот формат не подходит. После некоторых исследований я обнаружил, что можно переключить http-клиент по умолчанию (я использовал okhttp-клиент) и добавить собственный логгер / перехватчик для этого клиента. Я подготовил небольшой пример. Другое решение состоит в том, что вы можете добавить собственный логгер для симуляции клиента, но этот способ более гибкий.