Estoy interesado en la inyección directa de dependencia de campo. Tradicionalmente, Spring admite tanto la inyección de constructor (proporcionando argumentos a los constructores) como la inyección basada en el instalador (los establecedores de llamadas en una llamada).¿Por qué Spring no admite la inyección directa de dependencia de campo (excepto para autocableado)?
Sin embargo, Spring también es capaz de inyección de campo directa (configuración de campos de miembros de un objeto sin un método setter), como se evidencia al anotar campos con @Autowired
. El autoenvío está limitado a solo "beans", por lo que los valores primitivos no se pueden inyectar (aunque esto se puede evitar mediante la creación de beans de la clase "java.lang.String"; esto funciona, pero tiene las advertencias normales de autoenvío). Además de esto, Spring admite @Value
para establecer valores directamente en los campos de miembros desde propiedades, etc.
Sin embargo, Spring no permite que las propiedades se establezcan directamente en los campos de miembros (sin autoenvío).
Mi pregunta es: ¿por qué?
Obviamente es capaz de hacerlo, entonces ¿por qué no? ¿Hay algún efecto secundario negativo que lo impida? ¿O la capacidad es de alguna manera limitada, de modo que solo el autoenvío tiene sentido? ¿Necesita algunos hacks más grandes que llamar setters?
Tenga en cuenta que no deseo discutir los méritos relativos de tener instaladores y captadores en general, solo las razones por las cuales Spring ha hecho esta elección.
Siempre me he preguntado lo mismo y asumió la razón se relaciona con "hacer que el código limpio" y la prevención de la emisión de advertencias del compilador en torno a este valor, se establece-nunca-y-que-está-intentar-a -use-it. –