Durante mucho tiempo creí que había un valor en tener una "configuración centralizada y declarativa" como los archivos xml que todos solíamos usar. Entonces me di cuenta de que la mayoría de las cosas en los archivos no eran configuración , nunca cambiaron en ningún lugar después del desarrollo, nunca. Entonces me di cuenta de que "centralizado" solo tiene valor en sistemas bastante pequeños: solo en sistemas pequeños podrá alguna vez asimilar un archivo de configuración en su conjunto . ¿Y cuál es realmente el valor de entender el cableado en su conjunto, cuando los mismos "cables" se duplican principalmente por dependencias en el código? Entonces, lo único que he guardado son los metadatos (anotaciones), que todavía son un poco declarativos. Estos nunca cambian en tiempo de ejecución y nunca datos de "configuración" que alguien cambiará sobre la marcha, así que creo que mantenerlo en el código es bueno.
Utilizo el cableado automático completo tanto como puedo. Me encanta. No volveré a la primavera antigua a menos que me amenacen a punta de pistola. Mis razones para preferir completamente @Autowired
han cambiado con el tiempo.
En este momento, creo que la razón más importante para usar el cableado automático es que hay una abstracción menos en su sistema para realizar un seguimiento. El "nombre del bean" desapareció efectivamente. Resulta que el nombre del bean solo existe debido a xml. Entonces, una capa completa de indirecciones abstractas (donde conectarías el nombre del frijol "foo" en la "barra" del frijol) ha desaparecido. Ahora conecto la interfaz "Foo" directamente a mi bean, y la implementación se elige por perfil de tiempo de ejecución. Esto me permite trabajar con código al rastrear dependencias e implementaciones. Cuando veo una dependencia con conexión automática en mi código, puedo presionar la tecla "ir a implementación" en mi IDE y aparece la lista de implementaciones conocidas. En la mayoría de los casos, solo hay una implementación y estoy directamente en la clase. Poder' qué implementación se está utilizando (afirmo que lo contrario está más cerca de la verdad con el cableado xml, ¡es curioso cómo cambia su perspectiva!)
Ahora se podría decir que es solo una capa muy simple, pero cada capa de abstracción que agregamos a nuestros sistemas aumenta la complejidad. Realmente no creo que el xml haya agregado ningún valor real a ningún sistema con el que he trabajado.
La mayoría de los sistemas con los que he trabajado solo tienen una configuración del entorno de tiempo de ejecución de producción. Puede haber otras configuraciones para la prueba, etc.
Diría que el cableado automático completo es el rubí sobre rieles de la primavera: abarca la noción de que hay un patrón de uso normal y común que la mayoría de los casos de uso siguen. Con la configuración XML usted permite una gran cantidad de uso de configuración coherente / inconsistente que puede / no ser intencionado. He visto tanta configuración xml exagerada con inconsistencias: ¿se refactoriza junto con el código? Pensé que no. ¿Están esas variaciones allí por alguna razón? Usualmente no.
Apenas usamos calificadores en nuestra configuración, y encontramos otras formas de resolver estas situaciones. Esta es una clara "desventaja" que encontramos: hemos cambiado ligeramente la forma en que codificamos para que interactúe de manera más fluida con el cableado automático: un repositorio de clientes ya no implementa la Repository<Customer>
interfaz genérica , pero creamos una interfaz CustomerRepository
que se extiende Repository<Customer>
. A veces también hay uno o dos trucos cuando se trata de subclasificar. Pero por lo general, solo nos apunta en la dirección de una escritura más fuerte, lo que creo que casi siempre es una mejor solución.
Pero sí, usted está atando a un estilo particular de DI que la mayoría de la primavera hace. Ya ni siquiera hacemos setters públicos para dependencias (por lo que podría argumentar que estamos en +1 en el departamento de encapsulación / ocultación de información) Todavía tenemos algo de xml en nuestro sistema, pero el xml básicamente solo contiene las anomalías. El cableado automático completo se integra muy bien con xml.
Lo único que necesitamos ahora es para el @Component
, @Autowired
y el resto a ser incluidos en un JSR (como JSR-250 ), por lo que no tenemos para empatar con la primavera. Esta es la forma en que las cosas han estado sucediendo en el pasado (las java.util.concurrent
cosas me vienen a la mente), por lo que no me sorprendería por completo si esto sucediera nuevamente.