Skip to content

Commit 03dc96d

Browse files
committed
fix: 解决自定义 AbstractStorageHandler 不能替代框架默认 FileRecorder
1 parent 872f703 commit 03dc96d

1 file changed

Lines changed: 43 additions & 3 deletions

File tree

  • common/plugin/storage/src/main/java/com/github/cadecode/uniboot/common/plugin/storage/config

common/plugin/storage/src/main/java/com/github/cadecode/uniboot/common/plugin/storage/config/XFileStorageConfig.java

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
package com.github.cadecode.uniboot.common.plugin.storage.config;
22

3+
import cn.hutool.core.util.ObjUtil;
34
import com.github.cadecode.uniboot.common.plugin.storage.handler.AbstractStorageHandler;
45
import lombok.RequiredArgsConstructor;
5-
import org.dromara.x.file.storage.core.recorder.FileRecorder;
66
import org.dromara.x.file.storage.spring.EnableFileStorage;
7+
import org.springframework.beans.BeansException;
8+
import org.springframework.beans.factory.config.BeanDefinition;
9+
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
10+
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
11+
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
12+
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
713
import org.springframework.context.annotation.Bean;
814
import org.springframework.context.annotation.Configuration;
915

16+
import java.util.Arrays;
17+
import java.util.Optional;
18+
1019
/**
1120
* x-file-storage 配置类
1221
*
@@ -18,8 +27,39 @@
1827
@Configuration
1928
public class XFileStorageConfig {
2029

30+
public static final String BEAN_NAME_FILE_RECORDER = "fileRecorder";
31+
2132
@Bean
22-
public FileRecorder fileRecorder(AbstractStorageHandler storageRecordHandler) {
23-
return storageRecordHandler;
33+
public FileRecorderBeanDefinitionRegistryPostProcessor fileRecorderBeanDefinitionRegistryPostProcessor() {
34+
return new FileRecorderBeanDefinitionRegistryPostProcessor();
35+
}
36+
37+
/**
38+
* 解决自定义 AbstractStorageHandler 不能替代 x-file-storage 框架默认 FileRecorder
39+
*/
40+
public static class FileRecorderBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
41+
42+
@Override
43+
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
44+
45+
}
46+
47+
@Override
48+
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
49+
String[] handlerBeanNames = beanFactory.getBeanNamesForType(AbstractStorageHandler.class);
50+
// 查找 primary 的,不存在则取第一个
51+
if (ObjUtil.isNotEmpty(handlerBeanNames)) {
52+
Optional<BeanDefinition> primaryBF = Arrays.stream(handlerBeanNames)
53+
.map(beanFactory::getBeanDefinition)
54+
.filter(BeanDefinition::isPrimary)
55+
.findFirst();
56+
BeanDefinition handlerBF;
57+
handlerBF = primaryBF.orElseGet(() -> beanFactory.getBeanDefinition(handlerBeanNames[0]));
58+
if (beanFactory instanceof DefaultListableBeanFactory) {
59+
((DefaultListableBeanFactory) beanFactory).removeBeanDefinition(BEAN_NAME_FILE_RECORDER);
60+
((DefaultListableBeanFactory) beanFactory).registerBeanDefinition(BEAN_NAME_FILE_RECORDER, handlerBF);
61+
}
62+
}
63+
}
2464
}
2565
}

0 commit comments

Comments
 (0)