Spring MVC(Spring Boot)を使用してRESTサービスを実装していますが、サービスのいくつかのクロス機能を処理するためにAspect
を作成しています。RESTサービスでAOPを使用したデータ検索の最適化
public void doSomethingWithUser(int userId){
// retrieve user from DB and do something...
}
と私のAspect
クラスで、このような方法:
@Around("execution(* com.test.myrestsvc.services.MyService.doSomethingWithUser(..))")
public void aroundDoSomething(ProceedingJoinPoint pjp) throws Throwable {
// retrieve user (the same retrieved in the method) and do something else...
}
あなたが見ることができるように、私は別のことをやって二つの方法があります
の例では、このようなサービス方法であります同じユーザーオブジェクトであるため、ユーザーが既にメインメソッドで取得されていても、同じクエリを2回実行する必要があります。
私のサービス層の特定のメソッドでは、1回のメソッド呼び出しによってトリガされるいくつかの側面があります。これにより、ユーザーの取得回数が何度か増えます。
私は、少なくともREST(ステートレス)アプリケーションのアスペクト間でオブジェクトを共有する方法はあるのでしょうか?これらの状況でデータアクセスを最小限に抑えるために、別のアプローチを提案できますか?
_ "私は同じクエリを2回実行する必要があります" _これはデータのロード方法によって異なります。ユーザーが既にキャッシュされている可能性があります。それ以外の場合はキャッシュすることができます。 '@ Cachable'を使用します。 – zeroflagL