Короткий ответ: да, это возможно. В вашей другой класс/нить, вы можете сделать
// this will create a new instance of that controller where no fields are wired/injected
TestResultUploadController controller = new TestResultUploadController();
controller.uploadTestResult("someString", 1234);
Однако, имейте в виду, что ваша установка является весьма необычным, и все ваши autowired поля не будет подключен правильно. Если вы получаете ваш контроллер от контекста, вы бы быть в состоянии иметь свои поля Проводная/впрыскивается правильно:
// obtain controller bean from context, should have fields wired properly
TestResultUploadController controller = ctx.getBean(TestResultUploadController.class);
controller.uploadTestResult("someString", 1234);
или вы можете в вашем другом классе, есть:
@Autowired private TestResultUploadController controller;
....
public void doStuff(){
controller.uploadTestResult("someString", 1234);
}
Опять же, это очень необычно, но очень возможно. Однако, просто заставить что-то сделать, не означает, что вы должны это делать. Я бы рекомендовал более общий подход Spring/MVC, в котором вы передаете бизнес-логику в Службу. В принципе, есть что-то вроде этого:
@Controller
public class TestResultUploadController {
@Autowired private UploadTestResultService uploadTestResultService;
@RequestMapping(method = RequestMethod.POST,value="/uploadTestResult")
public @ResponseBody String uploadTestResult(String testResultBarcode,int deviceLoc) {
return uploadTestResultService.uploadTestResult(testResultBarcode, deviceLoc);
}
}
И в вашей теме:
//somehow get the service
UploadTestResultService uploadTestResultService = //somehowGetTheService (whether from context or in some other way)
uploadTestResultService.uploadTestResult(testResultBarcode, deviceLoc);
Таким образом, вы бы иметь возможность дразнить UploadTestResultService в тестах контроллера, и вы также сможет самостоятельно протестировать метод uploadTestResult для этой службы, не входя в контроллер.
EDIT: Как получить контекст Spring вне сферы действия этого вопроса. Я предполагаю, что вы знаете основную весну, а также базовую java.
сделать способ статическим? – aardvark
Если вам нужно это сделать, я думаю, что у вас проблемы с дизайном. возможно, вам следует перевести метод на более низкий уровень, чтобы быть доступным другим контроллерам. – TheEwook
FYI. Я могу вызвать этот метод, создав объект контроллеров и напрямую вызвав этот метод. но в этом случае @Полученные поля не будут инициализированы. Я знаю, что дизайн неправильный, но поток должен быть таким образом, потому что я пытаюсь вызвать этот метод из потока, который инициализируется во время инициализации контекста. –