2016-04-26 9 views
0

私は汎用的な機能を含む基本抽象コントローラクラスを持っています。私はサブクラスも持っています。 抽象クラスには、依存関係を挿入したいプロパティがあります。このプロパティはすべてのサブクラスに共通しているため、すべてのサブクラスで設定する必要はありません。しかし、サブクラスで抽象コントローラの関数を呼び出すと、abstractコントローラのプロパティであることがわかります。
Abstract Controller:私はなぜ、どのようit.Belowを修正するためのコードスニペットであるかを知りたい抽象的なコントローラのDependcyインジェクションが失敗しました

@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

実際、抽象コントローラ内の 'permissionService = ClientUtils.getClient(IPermissionService.class);のように、SOAによってpermissionServiceが取得されます。 permissionServiceは良いです。なぜなら、私が直接subControllerのpermissionServiceを取得すると、それはうまく動作するからです。 –

+0

ここでうまくいくので、本当に難しいです。 'XXX()'はどうやって呼びますか? – dambros

答えて

0

私はあなたがスーパークラスのことを隠している、これをやって、サブクラスでpermissionServiceを注入する必要はないと思います。

+0

最初の2つのコードスニペットでは、私はサブクラスにpermissionServiceを注入しなかったので、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 
    } 

} 
関連する問題