コントローラー メソッドに関する AOP アドバイスを記述する標準的な方法と、コントローラー メソッドで宣言されている場合は HttpServletRequest 引数にアクセスできることを知っています。
しかし、私のシナリオは、現在、翻訳のためにユーザーのロケールを維持するセッションスコープの翻訳サービスを持っているということです。これにより、サービスがステートフルになり、実際にはシングルトンだと思うので、セッションスコープにしたくありません。しかし、翻訳サービス メソッドが呼び出される場所は複数あるため、署名を変更してこれらのメソッドにリクエスト/ロケールを追加したくありません。問題は、翻訳サービスのメソッドのすべての呼び出し元が 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 を持っていない場合、アドバイスでリクエストを取得できませんか? 回避策はありますか?