【发布时间】:2020-04-25 20:32:30
【问题描述】:
假设我们有一个 FileLoader 接口:
public interface FileLoader {
default String loadFile(String fileId) {
// Default business logic
return "Default implementation for FileLoader. Loading file" + fileId;
}
}
以及针对不同国家/地区的不同实施:
public class USAFileLoader implements FileLoader {
@Override
public String loadFile(String fileId) {
// ... Specific business logic for USA
return "USA implementation for FileLoader. Loading file" + fileId;
}
}
public class FRAFileLoader implements FileLoader {
@Override
public String loadFile(String fileId) {
// ... Specific business logic for France
return "France implementation for FileLoader. Loading file" + fileId;
}
}
我们创建一个端点来加载文件:
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FileUploadController {
FileLoader fileLoader;
@PostMapping("/load/{fileId}/{countryCode}")
public String loadFile(@PathVariable String fileId, @PathVariable String countryCode) {
fileLoader = ... // Inject the right loader based on countryCode
return fileLoader.loadFile(fileId);
}
}
如何根据countryCode 在运行时为每个请求注入正确的FileLoader?我在 Spring 中发现了一个名为 FactoryBean 的东西,它显然可以工作,但我现在确定它是否是正确的工具,或者这是否是解决此问题的正确方法。另外,我不知道在同时处理请求时注入会如何表现。
【问题讨论】:
-
您听说过服务定位器和工厂模式吗? stackoverflow.com/questions/8325619/…
标签: java spring spring-boot dependency-injection