2012-06-07 10 views

Respuesta

57

Porque el uso de campos estáticos fomenta el uso de métodos estáticos. Y los métodos estáticos son malvados. El objetivo principal de la inyección de dependencia es permitir que el contenedor cree objetos para usted y los conecte. También hace las pruebas más fáciles.

Una vez que comience a utilizar métodos estáticos, ya no es necesario crear una instancia de objeto y la prueba es mucho más difícil. Además, no puede crear varias instancias de una clase determinada, cada una con una dependencia diferente que se inyecta (porque el campo se comparte implícitamente y crea un estado global, también mal).

+10

La única advertencia a esto que he encontrado es durante la prueba. Si quieres usar '' '@ BeforeClass''' en SpringJUnit4ClassRunner, y tienes ese método para acceder a los beans' '' @ Autowired''' en la prueba ... básicamente no puedes. Que es molesto –

+4

Esta respuesta explica por qué no debería. Pero el motivo real es que cuando el marco trata de conectar la clase estática en un bean, puede que todavía no haya sido cargado por el cargador de clase –

+31

Esta respuesta es completa sin sentido. Spring doesn ' t impone su estrategia de prueba La respuesta es que todavía no hay una biblioteca de Spring cargada cuando la clase estática es instanciada por el cargador de clase –

11

De acuerdo con el concepto OOP, será un mal diseño si las variables estáticas están auto conectadas.

La variable estática no es propiedad de Object, pero es propiedad de una Clase. El cableado automático de resortes se realiza en objetos, y eso hace que el diseño sea limpio en mi opinión. Puede implementar el objeto de bean con conexión automática como singleton, y lograr lo mismo que definirlo estático.

100

Porque cuando el cargador de clases carga los valores estáticos, el contexto de Spring no se ha cargado todavía. Entonces el cargador de clases no inyectará correctamente la clase estática en el bean y fallará.

+33

Gracias por una respuesta que parece responder a la pregunta en lugar de simplemente expresar una opinión de que la mitad del lenguaje Java es una mala idea. –

7

Con esta solución puede autocablear campos estáticos en la primavera.

@Component 
public class TestClass { 

    private static Test test; 

    @Autowired 
    public void setTest(Test test) { 
     TestClass.test = test; 
    } 
} 
+0

Bugfinder se quejará sobre la configuración del campo estático del método no estático. – Neftanic

Cuestiones relacionadas