Znam standardowy sposób pisania porady AOP wokół metody kontrolera i że można uzyskać dostęp do argumentu HttpServletRequest, jeśli zadeklarowano w metodzie sterownika.Jak wprowadzić HttpServletRequest do żądania Spring AOP (niestandardowy scenariusz)?
Ale moim scenariuszem jest to, że mam usługę tłumaczenia, która obecnie ma zasięg sesji, zachowując lokalizację użytkownika dla tłumaczenia. Uważam, że to sprawia, że usługa jest pełna, a także, że nie chcę, aby była ona dostępna w sesjach, ponieważ myślę, że to naprawdę Singleton. Ale istnieje wiele miejsc, w których wywoływane są metody usług tłumaczeniowych, więc nie chcę zmieniać podpisu, aby dodać żądanie/ustawienia regionalne w tych metodach. Problem polega na tym, że wszyscy wywołujący metody usługi tłumaczenia nie mają dostępu do HttpServletRequest (nie metody kontrolera)? Czy mogę napisać jakiś aspekt dotyczący metod usług tłumaczeniowych i jakoś magicznie uzyskać dostęp do HttpServletRequest, niezależnie od tego, czy jest on dostępny w kontekście dzwoniącego czy nie?
@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) { .... }
}
Jeśli teraz rozmówca tłumaczący nie ma HttpServletRequest, czy nie mogę uzyskać prośby o poradę? Czy jest w pobliżu praca?