私はコントローラメソッドについてAOPアドバイスを書く標準的な方法を知っていますし、コントローラメソッドで宣言されていればHttpServletRequest argにアクセスすることができます。HttpServletRequestをSpring AOPリクエストに挿入するには(カスタムシナリオ)?
私のシナリオでは、翻訳サービスがあり、現在はセッションスコープで翻訳のためにユーザーのロケールを維持しています。私はこれがサービスをステートフルにしていると感じています。そして、私はそれが本当にシングルトンだと思うので、セッションスコープにしたくありません。しかし、翻訳サービスメソッドが呼び出される場所は複数あります。したがって、これらのメソッドでは、署名を変更してリクエスト/ロケールを追加する必要はありません。問題は、翻訳サービスのメソッドの呼び出し側すべてがHttpServletRequest(コントローラメソッドではない)にアクセスできないことです。翻訳サービスメソッドについての面を書くことができ、呼び出し元のコンテキストで使用できるかどうかにかかわらず、何とかHttpServletRequestに魔法のようにアクセスできますか?
@Service
public class TranslationService {
public void translate(String key) {
...
}
}
@Aspect
@Component
public class LocaleFinder {
@PointCut("execution(* TranslationService.translate(..))")
private void fetchLocale() {}
@Around("fetchLocale()") // in parameter list
public void advice(JoinPoint joinpoint, HttpServletRequest request) { .... }
}
今、変換の呼び出し側がHttpServletRequestのを持っていない場合、私はアドバイスに要求を得ることができませんか?回避策はありますか?