我知道我可以使用@Autowired在类中注入一个bean。
现在我好奇:: 我不希望拥有@Autowired的私人属性。 我在我的控制器中有一个函数,我想在函数中直接注入bean作为参数。 我收到一个错误,说文件和令牌不是bean。
有没有办法自动装配或只注入我需要的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;
}
}
答案 0 :(得分:3)
作为内置功能,没有。你不能做你的建议。
但是,Spring提供了自己编写此功能的工具。您需要提出标记注释类型。像@MethodBean
这样的东西。您可以注释要从ApplicationContext
注入的处理程序方法参数。然后,您需要编写一个扩展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
带注释的参数,它将找到您的自定义实现,在注入的WebApplicationContext
中查找参数类型的bean,并将其作为参数提供。