我的版本
spring-cloud-alibaba-dependencies 2021.1
spring-cloud-dependencies 2020.0.0
github bug地址github.com/alibaba/spr…
github.com/alibaba/spr… 根据上面链接给出的代码改了一下,能用。
import cn.hutool.core.util.ReflectUtil;
import com.alibaba.cloud.sentinel.feign.SentinelFeign;
import feign.Target;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import java.lang.reflect.Field;
@Aspect
public class SentinelTargeterAspect {
@Around("execution(* org.springframework.cloud.openfeign.Targeter.target(..))")
public Object process(ProceedingJoinPoint pjp) throws Throwable {
SentinelFeign.Builder factory = (SentinelFeign.Builder) pjp.getArgs()[1];
Target.HardCodedTarget target = (Target.HardCodedTarget) pjp.getArgs()[3];
//hutool工具类反射
Field field = ReflectUtil.getField(factory.getClass(), "applicationContext");
ApplicationContext applicationContext = (ApplicationContext) ReflectUtil.getFieldValue(factory, field);
GenericApplicationContext gctx = (GenericApplicationContext) applicationContext;
BeanDefinition def = gctx.getBeanDefinition(target.type().getName());
def.setAttribute("feignClientsRegistrarFactoryBean", pjp.getArgs()[0]);
return pjp.proceed();
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfig {
@Bean
public SentinelTargeterAspect sentinelTargeterAspect() {
return new SentinelTargeterAspect();
}
}