0

私はコントローラクラスを持っています:

@Controller
public class MyController {

@AutoWired
Service myservice

@RenderMapping
public display(){
    //do work with myservice
}

}

外部クラスからメソッド display() を呼び出したいのですが、null ポインター例外です。

外部クラスから表示メソッドを呼び出す方法は次のとおりです。

new MyController.display()

しかし、インスタンス myservice は null に設定されています。

MyController.display() を呼び出して、 myservice のインスタンスが null に設定されていないことを確認するにはどうすればよいですか?

問題は、コントローラーの新しいインスタンスを作成しているため、サービスが自動配線されていないことだと思いますか? しかし、Spring コントローラーはシングルトンであるため、おそらくコントローラーの現在のインスタンスにアクセスできますか?

アップデート :

私がこれを試みている理由は、どのコントローラー表示方法を実装する必要があるかを決定する構成オプションを追加しているためです。おそらく、スーパーコントローラーを使用して、どのコントローラーを実装する必要があるかを判断する必要がありますか?

4

2 に答える 2

1

アイデアは、抽象親クラスを使用することです!

// this class has no mapping
public abstract class MyAbstractController() {
  @Autowired
  MyService service

  public String _display(Model model, ...) {
    // here is the implementation of display with all necessary parameters
    if(determine(..)){...}
    else {...}
  }

  // this determines the behavior of sub class
  public abstract boolean determin(...);
}

@Controller
@RequestMapping(...)
public class MyController1 extends MyAbstractController {

  @RequestMapping("context/mapping1")
  public String display(Model model, ...) {
    // you just pass all necessary parameters to super class, it will process them and give you the view back.
    return super._display(model, ...);
  }

  @Override
  public boolean determine(...) {
  // your logic for this 
  }
}

@Controller
@RequestMapping(...)
public class MyController2 extends MyAbstractController {

  @RequestMapping("context/mapping2")
  public String display(Model model, ...) {
    // you just pass all necessary parameters to super class, it will process them and give you the view back.
    return super._display(model, ...);
  }

  @Override
  public boolean determine(...) {
  // your logic for this 
  }
}

これがあなたを助けることを願っています...

于 2013-10-01T12:33:50.620 に答える
0

問題は、コントローラーの新しいインスタンスを作成しているため、サービスが自動配線されていないことだと思いますか?

はい。Spring の BeanFactory API を使用して、Bean にアクセスできます。しかし、コントローラーを直接呼び出すのは怪しげに聞こえます。何を達成しようとしているのか教えていただけますか?それを行う標準的な方法があるかどうかを確認できますか?

于 2013-10-01T10:55:03.000 に答える