gpt4 book ai didi

java - 如何创建切入点来支持接口(interface)继承的假客户端?

转载 作者:行者123 更新时间:2023-12-01 17:12:47 25 4
gpt4 key购买 nike

在 Spring Boot 项目中,我有一个简单的 feign 客户端

@MyAnnotation
@FeignClient(name="some-name", url="http://test.url")
public interface MyClient {
@RequestMapping(method = RequestMethod.GET, value = "/endpoint")
List<Store> getSomething();
}

我需要拦截所有调用,为此我正在创建一个可在不同项目中使用的通用库。为了实现它,我尝试使用 Spring AOP。我创建了一个方面,它包装了用 MyAnnotation

注释的对象的所有公共(public)方法
@Around("@within(MyAnnotation) && execution(public * *(..))")
public Object myWrapper(ProceedingJoinPoint invocation) throws Throwable {
// ...
}

它工作正常,所有调用都会被拦截,直到我尝试将 MyAnnotation 放在使用 feign 接口(interface)继承的 feign 客户端上。当我使用继承的接口(interface)初始化客户端时,不再拦截调用。

public interface FeignClientInterface {
@RequestMapping(method = RequestMethod.GET, value = "/endpoint")
List<Store> getSomething();
}

@MyAnnotation
@FeignClient(name="some-name", url="http://test.url")
public interface MyClient extends FeignClientInterface{
}

我尝试过:

  • "@target(MyAnnotation) &&execution(public * *(..))" 但是当我将我的库连接到真实项目时,我得到了 java.lang.IllegalArgumentException: Cannot subclass Final class org.springframework.boot.autoconfigure.AutoConfigurationPackages$BasePackages 看起来它想将所有内容包装到代理中,并且有最终类。
  • "@target(MyAnnotation) &&execution(public * com.my.company.base.package.*(..))" 删除了上一个问题,但给出了另一个问题,就像某些 bean 不能被实例化时没有名称等。

问题是如何在不将 @MyAnnotation 移动到基本接口(interface) FeignClientInterface 的情况下使其工作。它在另一个项目中,我无法控制它。

最佳答案

好吧,经过几个小时的调查,我用这个替换了我的切入点

@Around("execution(* (@MyAnnotation *).*(..)) || execution(@MyAnnotation * *(..))")

如上所述here我仅使用执行来避免创建代理。

关于java - 如何创建切入点来支持接口(interface)继承的假客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61412906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com