gpt4 book ai didi

java - 在具有多个参数的函数中注入(inject)特定 bean 作为参数

转载 作者:行者123 更新时间:2023-11-30 08:18:42 24 4
gpt4 key购买 nike

我知道我可以使用@Autowired 在类中注入(inject)一个 bean。

现在我很好奇::我不想使用@Autowired 的私有(private)属性。我的 Controller 中有一个函数,我想直接在函数中注入(inject) bean 作为参数。我收到一条错误消息,指出文件和 token 不是 beans。

有没有办法 Autowiring 或注入(inject)我需要的 bean 作为参数?

@Controller
public class SpinalToolboxWebController {

/*@Autowired
private FileOperationsService fileOperationsService;


@Autowired
private Comparator<String> comparator;

@Autowired
private ServerResponse serverResponse;

@Autowired
private SoftwareCommunicationService softwareCommunicationService;

@Autowired
private StringBuffer stringBuffer;

@Autowired
private UserEnvironmentService userEnvironmentService;*/


@Autowired
@RequestMapping(value="/upload", method = RequestMethod.POST, produces="application/json")
public @ResponseBody
ServerResponse handleUploadedFiles(@RequestParam(value = "file") MultipartFile file,
@RequestParam(value="token") String token,
SoftwareCommunicationService softwareCommunicationService,
FileOperationsService fileOperationsService,
ServerResponse serverResponse )throws IOException {

System.out.println("Passing throught upload controller");

if(!fileOperationsService.isUploadedFileExtensionAllowed(file.getOriginalFilename()))
{
serverResponse.setUndefinedResponse();
return serverResponse;
}

if(fileOperationsService.uploadFile(file, token)){
serverResponse.setResponse(file, softwareCommunicationService.generateRawAndHeader(file));
}
else{
serverResponse.setUndefinedResponse();
}
return serverResponse;
}

}

最佳答案

作为内置功能,没有。你不能按照你的建议去做。

但是,Spring 提供了自己编写此功能的工具。您需要想出一个标记注释类型。类似于 @MethodBean。您可以注释要从 ApplicationContext 注入(inject)的处理程序方法参数。然后,您需要编写一个类来扩展 HandlerMethodArgumentResolver 并查找此注释。您必须添加一个 @Autowired WebApplicationContext 字段,从中获取 bean 并将它们提供给方法。

然后,您可以将此 bean 注册为我们 MVC 堆栈的 HandlerMethodArgumentResolver 的一部分。

当 Spring 确定它必须调用您的示例中的处理程序方法时,它现在看起来像这样

@RequestMapping(value="/upload", method = RequestMethod.POST, produces="application/json")
public @ResponseBody
ServerResponse handleUploadedFiles(@RequestParam(value = "file") MultipartFile file,
@RequestParam(value="token") String token,
@MethodBean SoftwareCommunicationService softwareCommunicationService,
@MethodBean FileOperationsService fileOperationsService,
@MethodBean ServerResponse serverResponse )throws IOException {

它将使用适当的 HandlerMethodArgumentResolver 来解析每个参数的参数。

对于 @MethodBean 注解的参数,它会找到您的自定义实现,在注入(inject)的 WebApplicationContext 中寻找参数类型的 bean,并将其提供为一个论点。

关于java - 在具有多个参数的函数中注入(inject)特定 bean 作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27305881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com