我正在使用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”方法。当然,它满足您的要求,即只能调用一次。

10-06 14:03