Comment injecter HttpServletRequest au Spring AOP demande (scénario)?

Je sais que le niveau moyen de l'écriture d'un AOP conseils autour d'une méthode de contrôleur et que vous pouvez obtenir l'accès à la HttpServletRequest arg, s'il est déclaré dans la méthode du contrôleur.

Mais mon scénario, c'est que j'ai un service de traduction, qui est actuellement à la session de l'étendue de maintien de la locale de l'utilisateur pour la traduction. Je pense que ça rend le service dynamique et aussi je ne veux pas qu'il soit à la session de l'étendue, comme je pense qu'il est vraiment Singleton. Mais il y a plusieurs endroits où le service de traduction méthodes sont appelées et donc je ne veux pas changer la signature de demande d'ajout/locale dans ces méthodes. Le problème est que tous les appelants de la traduction du service méthodes n'ont pas accès à HttpServletRequest (pas de contrôleur de méthodes)? Puis-je écrire un aspect autour de la traduction des méthodes de service et d'une certaine façon comme par magie accéder à HttpServletRequest, indépendamment de savoir si elle est disponible dans de l'appelant contexte ou pas?

@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) { .... } 
}

Si maintenant, l'appelant de traduire n'a pas HttpServletRequest, je ne peux pas obtenir la demande dans les conseils? Est-il une solution?

OriginalL'auteur Paddy | 2013-10-09