Это контроллер, который вызывает thread 'TestRunner'.Spring autowire предоставляет nullPointerException
@Controller
@RequestMapping("/welcome")
public class HomeController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView addCustomerPage() throws Exception{
ModelAndView modelAndView = new ModelAndView("customer/add-customer-form");
A a = new A();
B b = new B();
C c = new C();
TestRunner runner = new TestRunner(a, b, c);
Thread t = new Thread(runner);
t.start();
return modelAndView;
}
}
Это мой нить, которая вызывает сервис HomeService. Эта услуга autowired, но я все еще получаю исключение нулевого указателя, когда я звоню homeService.testMeth(a,b,c);
@Controller
public class TestRunner implements Runnable{
private A a;
private B b;
private C c;
@Autowired
private HomeService homeService;
public TestRunner() {
super();
// TODO Auto-generated constructor stub
}
public TestRunner(A a, B b, C c){
this.a = a;
this.b = b;
this.c = c;
}
public void run() {
// TODO Auto-generated method stub
homeService.testMeth(a,b,c);
}
}
Это класс обслуживания.
@Service
public class HomeService {
public void testMeth(A a, B b, C c){
System.out.println("inside....");
}
}
Это из-за того, что я создаю объект «TestRunner» с «новым»?
_Is это из-за того, что я создаю объект TestRunner с «новым»? _ Да. Почему вы не позволили Spring создать контроллер? – Reimeus
как autowiring TestRunner внутри HomeController? но я хочу передать параметры конструктору TestRunner. – user1298426
Самый простой способ решить это - сделать TestRunner * create * и вернуть Runnable, из a, b и c, переданных как аргументы в метод, а не TestRunner *, являющийся * Runnable. И он не должен быть аннотирован с помощью '@ Controller', поскольку он не является контроллером вообще. Вместо этого используйте '@ Component'. –