2009-11-26 5 views
0

Existe-t-il un moyen agréable d'avoir les classes @Controller de Spring pour appeler une méthode spécifique une fois par demande?Appeler les méthodes @Controller une fois par demande

Actuellement, j'utilise une méthode annotée avec @InitBinder à cette fin, mais cela est sous-optimal car les méthodes @InitBinder sont appelées plusieurs fois par requête. Je veux juste faire des choses d'initialisation/mise à jour à utiliser dans mes contrôleurs. Ce que je recherche est quelque chose comme before_filter de Rails, mais pour autant que je sache, il n'y a pas de fonctionnalité comme ça dans Spring.

Répondre

1

On dirait que vous avez besoin d'un request-scoped controller bean. Spring créera une nouvelle instance du contrôleur pour chaque requête et initialisera le bean à chaque fois en utilisant les mécanismes standard tels que @PostConstruct.

+0

J'ai déjà pensé à une telle solution, mais je ne veux pas initialiser mes contrôleurs à chaque requête. Je veux juste faire quelques petites tâches de nettoyage (par exemple réinitialiser certaines propriétés utilisées dans mes vues). Donc, ce serait possible, mais j'espérais une solution plus propre. – Koraktor

+0

Les contrôleurs de ressort sont par défaut partagés entre les threads et les demandes. Si vous avez un état per-request dans vos beans de contrôleur, vous ne devez pas les partager entre les requêtes, et les beans de portée de requête sont le moyen le plus propre et le plus sûr de gérer cela. – skaffman

+1

Existe-t-il un moyen d'autowire un bean de portée de requête dans un contrôleur à portée singleton? – Koraktor