¿Por qué no podemos conectar automáticamente la variable de instancia estática en el bean Spring? Sé que hay otra forma de lograr esto, pero solo quiero saber por qué no podemos hacerlo de la siguiente manera.
p.ej
@Autowired
public static Test test;
Respuestas:
Porque el uso de campos estáticos fomenta el uso de métodos estáticos. Y los métodos estáticos son malos. El propósito principal de la inyección de dependencias es permitir que el contenedor cree objetos para usted y los conecte. También facilita las pruebas.
Una vez que comience a usar métodos estáticos, ya no necesitará crear una instancia de objeto y las pruebas serán mucho más difíciles. 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 malvado).
fuente
@BeforeClass
en un SpringJUnit4ClassRunner, y ese método accede a beans@Autowired
en la prueba ... básicamente no puede. Lo que es molesto.Porque cuando el cargador de clases carga los valores estáticos, el contexto de Spring todavía no está necesariamente cargado. Entonces, el cargador de clases no inyectará correctamente los campos estáticos en el bean y fallará.
fuente
Según el concepto de programación orientada a objetos, sería un mal diseño si las variables estáticas se conectan automáticamente.
La variable estática no es una propiedad de Object, pero es una propiedad de una clase. El cableado automático de resorte se realiza en objetos, y eso, en mi opinión, hace que el diseño sea limpio. Puede implementar el objeto bean con cableado automático como singleton y lograr lo mismo que definirlo estático.
fuente
Con esta solución, puede conectar automáticamente campos estáticos en primavera.
fuente