Você pode usar @Autowired com campos estáticos?

Existe alguma maneira de usar @Autowired com campos estáticos. Se não, existem outras maneiras de fazer isso?

Em suma, não. Você não pode autowire ou manualmente ligar os campos estáticos no Spring. Você terá que escrever sua própria lógica para fazer isso.

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

@Autowired pode ser usado com setters para que você possa ter um setter modificando um campo estático.

Apenas uma sugestão final … NÃO

Crie um bean que você pode autowire que irá inicializar a variável estática como um efeito colateral.

Você pode conseguir isso usando a notação XML e o MethodInvokingFactoryBean . Por exemplo, olhe aqui .

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

Você deve procurar usar injeção de mola sempre que possível, pois esta é a abordagem recomendada, mas isso nem sempre é possível, como eu tenho certeza que você pode imaginar como nem tudo pode ser retirado do contêiner de mola ou talvez lidar com sistemas legados.

O teste de notas também pode ser mais difícil com essa abordagem.

Inicie seu componente autowired no 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(); } }