我有一个包含通用功能的基本抽象控制器类。我也有一组子类。
抽象类有一个我希望依赖注入的属性。此属性对所有子类都是通用的,因此我不希望在所有子类上设置它。但是当我在子类中调用抽象控制器的函数时,结果是抽象控制器中的属性为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
}
}
答案 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
}
}