Скажем, у нас есть интерфейс 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);
}
}
Как я могу ввести права FileLoader
во время выполнения для каждого запроса, основанного на countryCode
? В Spring я нашел что-то под названием FactoryBean , которое, очевидно, может работать, но теперь я уверен, что это правильный инструмент или это правильный способ решения этой проблемы. Кроме того, я не знаю, как инъекция будет вести себя при одновременной обработке запросов.