Por que não podemos autowire a variável de instância estática no bean Spring. Eu sei que há outra maneira de conseguir isso, mas só quero saber por que não podemos fazer da maneira abaixo.
por exemplo
@Autowired
public static Test test;
Por que não podemos autowire a variável de instância estática no bean Spring. Eu sei que há outra maneira de conseguir isso, mas só quero saber por que não podemos fazer da maneira abaixo.
por exemplo
@Autowired
public static Test test;
Respostas:
Porque o uso de campos estáticos incentiva o uso de métodos estáticos. E os métodos estáticos são maus. O objetivo principal da injeção de dependência é permitir que o contêiner crie objetos para você e conecte-os. Além disso, torna o teste mais fácil.
Depois de começar a usar métodos estáticos, você não precisa mais criar uma instância de objeto e o teste é muito mais difícil. Além disso, você não pode criar várias instâncias de uma determinada classe, cada uma com uma dependência diferente sendo injetada (porque o campo é implicitamente compartilhado e cria um estado global - também maligno).
@BeforeClass
em um SpringJUnit4ClassRunner e ter esse método de acesso aos beans @Autowired
no teste ... você basicamente não pode. O que é irritante.
Porque quando o carregador de classes carrega os valores estáticos, o contexto Spring ainda não está necessariamente carregado. Portanto, o carregador de classes não injetará corretamente os campos estáticos no bean e falhará.
De acordo com o conceito OOP, será um projeto ruim se as variáveis estáticas forem autowired.
A variável estática não é propriedade de Object, mas é propriedade de uma classe. A fiação automática da mola é feita em objetos, e isso torna o design limpo, na minha opinião. Você pode implantar o objeto bean com fio automático como singleton e obter o mesmo que defini-lo estático.
Com esta solução, você pode autowired campos estáticos na primavera.
@Component
public class TestClass {
private static Test test;
@Autowired
public void setTest(Test test) {
TestClass.test = test;
}
}