Quelle est la bonne façon d'utiliser un bean injecté dans une méthode statique?
Cette question peut sembler un peu bizarre. Supposons que j'ai un Service à qui je veux l'utiliser dans une classe Utilitaire qui a des méthodes statiques. Le Service est un Ressort de haricots, c'est donc naturellement que je vais utiliser, par exemple, un setter et (@Autocâblés) pour l'injecter dans ma classe utilitaire.
Comme il est mentionné dans le Ressort de la documentation, tous les haricots sont statiques dans le bean contexte. Ainsi, lorsque vous voulez injecter un bean dans une classe, vous n'avez pas à utiliser "statique" modificateur. Voir ci-dessous:
public class JustAClass{
private Service service;
public void aMethod(){
service.doSomething(....);
}
@Autowired
public void setService(Service service){
this.service = service;
}
}
Maintenant revenir à ce que j'ai mentionné pour la première fois (à l'Aide de Service dans une Méthode statique):
public class JustAClass{
private static Service service;
public static void aMethod(){
service.doSomething(....);
}
@Autowired
public void setService(Service service){
this.service = service;
}
}
Bien que le Service est statique, je suis obligé de mettre statique derrière sa définition. C'est un peu contre-intuitif pour moi. est-ce mal? ou est-il un meilleur moyen?
Grâce
OriginalL'auteur Hossein | 2013-10-27
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas autowire champ statique.
Mais vous pouvez faire un peu de solution de contournement:
Notez que vous devez déclarer cette classe en tant que "Composant" pour injecter tmpService
Est-ce quelque chose qui pourrait être fait régulièrement? Ou est-il une approche différente habituellement utilisés dans ces situations?
OriginalL'auteur yname
Vous n'avez pas le choix. Si vous souhaitez initialiser un
static
champ d'une classe, vous devez laisser le Printemps de créer une instance de cette classe et injecter de la valeur.Un peu de conseils. Il n'y a vraiment aucune raison pour vous d'être à l'aide de
static
méthodes dans ce cas. Si vous souhaitez un singleton utilitaire, il suffit de faire votre bean sesingleton
portée.OriginalL'auteur Sotirios Delimanolis