我正在使用Spring和SpringMvc,并且我想在某些控制器中调用服务的方法,并且两者
由Spring管理。当我尝试执行此操作时,我得到了NullPointerException,但我发现在调用此方法之前,该服务的构造函数已被真正调用。
我认为也许已经在Spring中添加了此Service,但是尚未设置此控制器中的属性。
我如何从SpringContext获得它?
我的代码是这样的:
@Controller
@RequestMapping("/test")
public class SomeController {
@Resource
private SomeService someService;
{
someService.serviceMethod();
//And something more
}
@RequestMapping("/someMethod")
private void controllerMethod(){
}
}
最佳答案
您试图从初始化程序块调用注入弹簧的服务。用@Resource注释的资源到春天还没有被注入到控制器中!这就是为什么您得到NullPointerException的原因
创建一个单独的函数,并用@PostConstruct注释。
@Controller
@RequestMapping("/test")
public class SomeController {
@Resource
private SomeService someService;
@PostConstruct
public void postConstruct(){
someService.serviceMethod();
}
}
在创建bean(即控制器)并将所有依赖项(包括SomeService)注入到bean之后,将调用“ postConstruct”方法。当然,它满足您的要求,即只能调用一次。