¿Puedes usar @Autowired con campos estáticos?

¿Hay alguna forma de usar @Autowired con campos estáticos? Si no, ¿hay otras formas de hacerlo?

En resumen, no. No se puede autoconectar o conectar manualmente campos estáticos en Spring. Tendrás que escribir tu propia lógica para hacer esto.

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

@Autowired se puede usar con setters para que pueda tener un setter que modifique un campo estático.

Solo una sugerencia final … NO

Crea un bean que puedes conectar automáticamente y que inicializará la variable estática como efecto secundario.

Puede lograr esto utilizando la notación XML y MethodInvokingFactoryBean . Para un ejemplo, mira aquí .

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

Debería tratar de usar inyección de resorte siempre que sea posible, ya que este es el enfoque recomendado, pero no siempre es posible ya que estoy seguro de que puede imaginarse ya que no todo se puede extraer del contenedor de resorte o puede tratarse con sistemas heredados.

Las pruebas de notas también pueden ser más difíciles con este enfoque.

Inicie su componente autocableado en el método @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(); } }