2016-11-03 10 views
2

私は以下のポイントカットを定義しました。これはうまくいきます。Spring AOPのアスペクト: ".."を使用してパラメータを置き換えることはできませんか?

@Pointcut("args(req, resp) && (execution(org.springframework.web.servlet.ModelAndView org.springframework.web.servlet.mvc.Controller+.*(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)))") 

しかし、私は応答変数を削除し、..でそれを置き換えるには、次のポイントカットに変更した場合:

@Pointcut("args(req) && (execution(org.springframework.web.servlet.ModelAndView org.springframework.web.servlet.mvc.Controller+.*(javax.servlet.http.HttpServletRequest, ..)))") 

ポイントカットは妙に、任意のマーカーを持っていないと実行されることは決してありません。

なぜこれが起こっているのでしょうか?

答えて

2

これは、構成されたポイントカットの最初の部分、つまりargs(req)によるものです。 1つの引数を取るメソッドにマッチします。

execution(org.springframework.web.servlet.ModelAndView org.springframework.web.servlet.mvc.Controller+.*(javax.servlet.http.HttpServletRequest, ..))

すなわち第二の部分は、タイプの少なくとも1つの引数のHttpServletRequestを有している方法と一致します。

しかし、コントローラインターフェイスメソッドhandleRequestは2つの引数をとります。

変更args(req,..)

@Pointcut("args(req,..) && (execution(org.springframework.web.servlet.ModelAndView org.springframework.web.servlet.mvc.Controller+.*(javax.servlet.http.HttpServletRequest, ..)))") 
にポイントカットのこの部分 args(req)
関連する問題