私はSpringブートを使用してREST APIを設定しています。私は@RestController
の束を作り、Model
と呼ぶ特定の抽象クラスのサブタイプを返すメソッドにポイントカットを設定したいと思う。ポイントカットの戻り値の型としてジェネリック型を使用する
public class Person extends Model {
...
}
だから、次のようになりますアドバイスを記述することが可能であろう:
@Aspect
@Component
public class ModelAspect {
@AfterReturning(
value = "execution(<T extends mypackages.Model> T mypackages.api.*.*(..))",
returning = "model")
public void doSomethingWithModel(Model model) {
...
}
}
私
Person
クラスは次のようになります
@RestController
public class UserController {
@RequestMapping(...)
public Person getAllPeople() {
...
}
}
:これらのコントローラは、このような何かを見て
もちろん、アドバイスは構文的には有効ではないため、動作しません。参照ドキュメントでは、返される型(Spring AOP reference)ではなく、汎用パラメータに関する情報しか見つかりませんでした。私が今持っていることは、このですが、私は上記の例のようなものが多く、より効率的になると思います。
@Aspect
@Component
public class ModelAspect {
@AfterReturning(
value = "execution(* mypackages.api.*.*(..))",
returning = "model")
public void doSomething(Object model) {
if (model instanceof Model)
doSomethingWithModel((Model) model);
}
}
私の次の質問は以下のようになり、Model
のsuptypesのCollection
を返すこれらのメソッドのための可能な同じです?リファレンスでは、パラメータタイプは汎用のCollection
であることはできないためです。
運がありません。私はクラス宣言とメソッドのパラメータで使われている "+"について読んでいましたが、戻り値の型ではなく、おそらくそれがまだサポートされていませんでしたか?私は 'Model'は実際にはインターフェースではなく抽象クラスであることに注意してください。私はそれを私の質問でも変更します。 – delucasvb
@delucasvb、私は私の答えを編集しました。 – alfcope
それでも動作させることができません...私は 'value'パラメータと' pointcut'パラメータの両方を試しました。エラーはなく、アスペクトのメソッドは呼び出されません。「実行」アドバイスbtwを使用するときは、戻り値の型を指定する必要がありますが、ワイルドカード '*'でもかまいません。 – delucasvb