♻️ 重构单体版本,支持一套代码支持两种登录模式

This commit is contained in:
冷冷 committed 2024-04-23 09:25:16 +08:00
1 parent 4bd449c53b
commit 078adf7d67
78 files changed
+1497 -1132

No files matched your search

@@ -17,7 +17,6 @@
package org.springframework.cloud.openfeign;
import com.pig4cloud.pigx.common.feign.PigxFeignAutoConfiguration;
import lombok.Getter;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
@@ -34,7 +33,6 @@ import org.springframework.core.env.Environment;
import org.springframework.core.io.support.SpringFactoriesLoader;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.lang.Nullable;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
@@ -47,8 +45,7 @@ import java.util.Map;
* <p>
* feign 自动配置功能 from mica
*/
public class PigxFeignClientsRegistrar
implements ImportBeanDefinitionRegistrar, BeanClassLoaderAware, EnvironmentAware {
public class PigxFeignClientsRegistrar implements ImportBeanDefinitionRegistrar, BeanClassLoaderAware, EnvironmentAware {
private final static String BASE_URL = "http://127.0.0.1:${server.port}${server.servlet.context-path}";
@@ -69,11 +66,12 @@ public class PigxFeignClientsRegistrar
}
private void registerFeignClients(BeanDefinitionRegistry registry) {
List<String> feignClients = new ArrayList<>();
List<String> feignClients = new ArrayList<>(
SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader()));
// 支持 springboot 2.7 + 最新版本的配置方式
ImportCandidates.load(FeignClient.class, getBeanClassLoader()).forEach(feignClients::add);
// 如果 spring.factories 里为空
if (feignClients.isEmpty()) {
return;
@@ -86,16 +84,20 @@ public class PigxFeignClientsRegistrar
if (attributes == null) {
continue;
}
// 如果是单体项目自动注入 & url 为空
Boolean isMicro = environment.getProperty("spring.cloud.nacos.discovery.enabled", Boolean.class, true);
// 如果已经存在该 bean,支持原生的 Feign
if (registry.containsBeanDefinition(className)) {
if (registry.containsBeanDefinition(className) && isMicro) {
continue;
}
registerClientConfiguration(registry, getClientName(attributes), attributes.get("configuration"));
validate(attributes);
BeanDefinitionBuilder definition = BeanDefinitionBuilder
.genericBeanDefinition(FeignClientFactoryBean.class);
definition.addPropertyValue("url", getUrl(attributes));
definition.addPropertyValue("url", getUrl(registry, attributes));
definition.addPropertyValue("path", getPath(attributes));
String name = getName(attributes);
definition.addPropertyValue("name", name);
@@ -149,7 +151,7 @@ public class PigxFeignClientsRegistrar
* @return the factory class
*/
private Class<?> getSpringFactoriesLoaderFactoryClass() {
return PigxFeignAutoConfiguration.class;
return PigxFeignClientsRegistrar.class;
}
private void validate(Map<String, Object> attributes) {
@@ -188,15 +190,17 @@ public class PigxFeignClientsRegistrar
return value;
}
private String getUrl(Map<String, Object> attributes) {
private String getUrl(BeanDefinitionRegistry registry, Map<String, Object> attributes) {
// 如果是单体项目自动注入 & url 为空
String url = (String) attributes.get("url");
boolean present = ClassUtils.isPresent("com.alibaba.cloud.nacos.discovery.NacosDiscoveryClient",
this.getClass().getClassLoader());
if (!StringUtils.hasText(url) && !present) {
url = resolve(BASE_URL);
Boolean isMicro = environment.getProperty("spring.cloud.nacos.discovery.enabled", Boolean.class, true);
if (isMicro) {
return null;
}
String url = resolve(BASE_URL);
return FeignClientsRegistrar.getUrl(url);
}