2016-04-26 1 views
0

У меня есть базовый абстрактный класс контроллера, который содержит общую функциональность. У меня также есть набор подклассов. Абстрактный класс обладает свойством, которое я хотел бы использовать для инъекции зависимостей. Это свойство является общим для всех подклассов, поэтому я не хочу, чтобы он был установлен во всех подклассах. но когда я называю функцию абстрактного контроллера в подклассе, он оказывается свойством в абстрактном контроллере равным нулю. Я хочу знать, почему и как исправить it.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

Ваш код, несмотря на то, что есть некоторые ошибки синтаксиса, работает он относительно инъекции службы. Это не дает мне никаких проблем. Покажите код своей службе, потому что, возможно, это проблема. – dambros

+0

Фактически, я получаю разрешение службы SOA, так же, как 'permissionService = ClientUtils.getClient (IPermissionService.class);' в абстрактном контроллере. Служба разрешений - это хорошо, потому что, если я получаю разрешение на обслуживание непосредственно в subController, он работает хорошо. –

+0

Действительно трудно сказать, так как он отлично работает здесь. Как вы называете 'XXX()'? – dambros

ответ

0

Я не думаю, что нужно вводить permissionService в подклассе, делая это вы скрываете, что суперкласса.

+0

Сначала два фрагмента кода, я не вводил allowService в подкласс, и он генерирует исключение Nullpointer. –

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 
    } 

} 
Смежные вопросы