抽象控制器中的依赖注入失败

时间:2016-04-26 07:29:01

标签: java spring spring-mvc

我有一个包含通用功能的基本抽象控制器类。我也有一组子类。 抽象类有一个我希望依赖注入的属性。此属性对所有子类都是通用的,因此我不希望在所有子类上设置它。但是当我在子类中调用抽象控制器的函数时,结果是抽象控制器中的属性为null。我想知道为什么以及如何解决它.Below是代码片段:
Abstract Controller

@Controller
public abstract class WebAPIBaseController {
    @Resource 
    private IPermissionService permissionService;

    public void validPermission(int user,String code){
       permissionService.valid(user,code);
    }
}

SubController

@Controller
@RequestMapping("/order")
public class OrderController extends WebAPIBaseController {

   public String XXX(){
    validPermission(1,"code");//it will throw a NullPointerException
}
}

此外,如果我删除抽象控制器(如下例),它的效果很好 Remove abstract controller

@Controller
@RequestMapping("/order")
public class OrderController{
    @Resource 
    private IPermissionService permissionService;

    public void validPermission(int user,String code){
       permissionService.valid(user,code);
    }
    public String XXX(){
    validPermission(1,"code");//it works good 
    }
}

3 个答案:

答案 0 :(得分:0)

我认为您不需要在子类中注入permissionService,这样做会隐藏超类的权限。

答案 1 :(得分:0)

看一下这个帖子Spring can you autowire inside an abstract class?。您还会在其中一个有关此主题的回复中找到另外两个主题。

答案 2 :(得分:0)

您可以在子类构造函数上使用@Autowired

public abstract class WebAPIBaseController {

  private final IPermissionService permissionService;

  public WebAPIBaseController(IPermissionService permissionService) {
    this.permissionService = permissionService;
  }

  public void validPermission(int user, String code){
    permissionService.valid(user,code);
  }

}

@Controller
@RequestMapping("/order")
public class OrderController extends WebAPIBaseController {

  @Autowired
  public OrderController(IPermissionService permissionService) {
    super(permissionService);
  }

  public String XXX(){
    validPermission(1,"code");//it will throw a NullPointerException
  }

}