这是调用线程' TestRunner'。
的控制器@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的线程。此服务是自动装配的,但在我调用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'对象' new' ?
答案 0 :(得分:0)
这是因为我正在用'new'创建'TestRunner'对象吗?
是的,正因为如此,你得到了NullpointerExceptoin。
要解决此问题,请更改以下内容:
将以下三个类别A,B,C标记为组件 - 如果不是 已经完成了。确保包在组件扫描路径中:
@Component
公共等级A {
@Component
公共等级B {
@Component
公共课C {
然后在TestRunner中自动装配A,B,C实例。还要将TestRunner的注释更改为@Component
@Component 公共类TestRunner实现Runnable { @Autowired 私人A a;
@Autowired
private B b;
@Autowired
private C c;
在HomeRunner中为TestRunner创建一个实例字段并自动装配它。使用TestRunner的新运算符删除实例代码。