From 9d356d4c1e6707303522a3ce02d5c80960006241 Mon Sep 17 00:00:00 2001
From: min1854 <102911352+min1854@users.noreply.github.com>
Date: Mon, 20 Feb 2023 16:04:40 +0800
Subject: [PATCH] fallback support factoryBean 2021.x branch (#3162)
feign fallback support factoryBean
---
.../cloud/sentinel/feign/SentinelFeign.java | 12 +++
...ntinelFallbackSupportFactoryBeanTests.java | 102 ++++++++++++++++++
2 files changed, 114 insertions(+)
create mode 100644 spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelFallbackSupportFactoryBeanTests.java
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeign.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeign.java
index b9d36ebf9..d867f9a59 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeign.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelFeign.java
@@ -27,6 +27,7 @@ import feign.InvocationHandlerFactory;
import feign.Target;
import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.cloud.openfeign.FeignClientFactoryBean;
@@ -41,6 +42,7 @@ import org.springframework.util.StringUtils;
* {@link Feign.Builder}.
*
* @author Jim
+ * @author 黄学敏(huangxuemin)
*/
public final class SentinelFeign {
@@ -126,6 +128,16 @@ public final class SentinelFeign {
"No %s instance of type %s found for feign client %s",
type, fallbackType, name));
}
+ // when fallback is a FactoryBean, should determine the type of instance
+ if (fallbackInstance instanceof FactoryBean>) {
+ try {
+ fallbackInstance = ((FactoryBean