Pouvez-vous utiliser @Autowired avec des champs statiques?

Est-il possible d’utiliser @Autowired avec des champs statiques. Sinon, existe-t-il d’autres moyens de le faire?

En bref, non. Vous ne pouvez pas envoyer ou câbler manuellement des champs statiques au spring. Vous devrez écrire votre propre logique pour ce faire.

 @Component("NewClass") public class NewClass{ private static SomeThing someThing; @Autowired public void setSomeThing(SomeThing someThing){ NewClass.someThing = someThing; } } 

@Autowired peut être utilisé avec les seters pour que vous puissiez avoir un setter modifiant un champ statique.

Juste une dernière suggestion …

Créez un bean que vous pouvez créer automatiquement pour initialiser la variable statique comme effet secondaire.

Vous pouvez y parvenir en utilisant la notation XML et le MethodInvokingFactoryBean . Pour un exemple, regardez ici .

 private static StaticBean staticBean; public void setStaticBean(StaticBean staticBean) { StaticBean.staticBean = staticBean; } 

Vous devriez vous efforcer d’utiliser l’injection par ressort lorsque cela est possible, car c’est l’approche recommandée, mais ce n’est pas toujours possible car vous pouvez imaginer que tout ne peut pas être retiré du conteneur ou que vous utilisez des systèmes existants.

Les tests de notes peuvent également être plus difficiles avec cette approche.

Initiez votre composant autowired dans la méthode @PostConstruct

 @Component public class TestClass { private static AutowiredTypeComponent component; @Autowired private AutowiredTypeComponent autowiredComponent; @PostConstruct private void init() { component = this.autowiredComponent; } public static void testMethod() { component.callTestMethod(); } }