Este curso est dirigido a gente interesada en el desarrollo de aplicaciones
JEE con Spring. Este framework permite agilizar y simplificar en gran medida el desarrollo de aplicaciones JEE. Estudiaremos desde los fundamentos hasta conceptos ms avanzados del framework Java ms utilizado en los ltimos aos para aplicaciones empresariales. Al final de este curso crearemos un proyecto, el cual utiliza las mejores prcticas de desarrollo en 3 capas, incluyendo patrones de diseo como son MVC, DAO, Factory, DTO, entre otros. Este proyecto puede usarse como la base para el desarrollo de proyectos empresariales propios utilizando el framework de Spring como orquestador de la capa de servicio. Por medio de ejemplos prcticos revisaremos las caractersticas de este framework, a su vez utilizaremos herramientas de desarrollo que nos permitirn crear ms rpidamente nuestras aplicaciones Java con Spring, as como la integracin con otros frameworks. 1 Todos los Derechos Reservados Global Mentoring 2011 Curso de Spring Framework Experiencia y Conocimiento para tu Vida Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 2 Experiencia y Conocimiento para tu Vida Spring es el framework Java utilizado por excelencia para el desarrollo de aplicaciones empresariales. Es uno de los frameworks ms utilizados al da de hoy y no es casualidad. El objetivo de Spring es simplificar el desarrollo de aplicaciones empresariales Java. A grandes rasgos, un framework es un conjunto de clases que nos permiten resolver un problema en especfico. En el caso particular de Spring, nos permite resolver muchos de los problemas que se presentan al desarrollar aplicaciones con tecnologa JEE (Java Enterprise Edition) Una de las mayores ventajas de Spring, es la forma modular en el que fue creado, permitiendo habilitar/deshabilitar las caractersticas a utilizar segn se requiera. La pgina oficial de Spring es www.springsource.org donde se pueden encontrar todos los proyectos relacionados con dicha tecnologa. Spring es utilizado en proyectos muy diversos, como puede ser en Instituciones Bancarias, Aseguradoras, Instituciones Educativas y de Gobierno, entre muchos otros tipos de proyectos y empresas. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 3 Experiencia y Conocimiento para tu Vida Spring permite desarrollar aplicaciones flexibles, altamente cohesivas y con un bajo acoplamiento. Spring permiti simplificar el desarrollo JEE al utilizar clases Java Simples (POJO Plain Old Java Object) para la configuracin de servicios. Debido a que muchos proyectos muestran las mismas tareas a realizar una y otra vez, tales como Localizacin de Servicios, Manejo de Transacciones, Manejo de Excepciones, Parametrizacin de la aplicacin, entre muchos ms. Spring permite resolver muchos de estos problemas de manera muy simple. Para lograr lo anterior el framework se base en dos conceptos fundamental: DI (Dependency Inyection): Este patrn de diseo permite suministrar objetos a una clase (POJO) que tiene dependencias, en lugar de ser ella misma sea quien los proporcione. AOP (Aspect Oriented Programming): AOP es un paradigma de programacin que permite modularizar las aplicaciones y mejorar la separacin de responsabilidades entre mdulos y/o clases. Las caractersticas anteriores son la base para la creacin de contenedores ligeros (lightweight containers). Spring es uno de los contenedores ligeros ms completos y populares al da de hoy. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 4 Experiencia y Conocimiento para tu Vida Spring se compone de distintos mdulos, permitiendo seleccionar solo algunos de ellos o todos, dependiendo de la naturaleza de la aplicacin. En la figura podemos observar algunos de los mdulos principales del Framework de Spring. A continuacin listaremos varios de ellos: 1. Spring Core: Este mdulo provee la funcionalidad bsica de la fbrica de Spring. El componente principal es BeanFactory, el cual aplica el concepto de Inversion of Control (IoC) o tambin conocido como Dependency Injection (DI). 2. Spring Context: Aqu es donde se realiza la configuracin del framework. Incluye la configuracin de servicios empresariales tales como JNDI, EJB, Internacionalizacin, validacin, entre varios ms. 3. Spring AOP: Permite aplicar los conceptos de Programacin Orientada a Aspectos (AOP), adems incluye clases de soporte para el manejo transaccional, la seguridad, entre varias clases ms, permitiendo desacoplar estas caractersticas de nuestra aplicacin. 4. Spring DAO: Permite aplicar conceptos de la capa de datos Data Access Object (DAO) a travs de POJOs (Plain Old Java Object), abstrayendo la complejidad, permitiendo crear un cdigo JDBC ms limpio y simple. 5. Spring ORM: Permite integrarse con tecnologas tales como JPA, Hibernate, entre otras. 6. Spring Web: Permite el desarrollo y la integracin con tecnologas como Struts, JSF, Tapestry, entre otros. 7. Spring MVC: Este mdulo implementa el patrn MVC para ser utilizado en la capa de presentacin. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 5 Experiencia y Conocimiento para tu Vida Una aplicacin empresarial en Java se compone de distintas capas, cada capa tiene una funcin muy especfica. Dividir una aplicacin en capas tiene varias ventajas, como son separacin de responsabilidades, un mejor mantenimiento a la aplicacin, especializacin de los programadores en cada capa, entre muchas ms. Spring es un framework que resuelve varios problemas de distintas capas, desde la capa de presentacin, la capa de negocio y la capa de datos. Aunque lo ms comn es que se combine con otras tecnologas y Spring quede como el orquestador de la capa de Servicio. A continuacin mencionaremos cada una de las capas de una aplicacin multicapas. Capa Web: La capa del Cliente es donde el cliente interacta por medio de un navegador Web, un cliente mvil, una aplicacin de escritorio, entre otros. Capa Web: la capa web que puede residir en un servidor web, las tecnologas mas bsicas que podemos encontrar en este servidor web son los JSPs y los Servlets. Capa de Negocio: en esta capa podemos encontrar tecnologa como son los Enterprise Java Beans (EJBs) o frameworks como Spring. Capa de Datos: aqu vamos a encontrar tecnologas como JDBC, Hibernate, entre otras. Este cdigo nos va a permitir comunicarnos con nuestra base de datos para leer y almacenar informacin en ella. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 6 Experiencia y Conocimiento para tu Vida Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 7 Experiencia y Conocimiento para tu Vida La cohesin y el acoplamiento juegan un rol central en el diseo de software. Al disear nuestros mdulos se requerirn cambios posteriores, por lo que su diseo puede impactar de manera directa en el tiempo y costo asociado para realizar dichos cambios. La cohesin es la medida en la que un componente se dedica a realizar solamente la tarea para la cual fue creado, delegando las tareas complementarias a otros componentes. El acoplamiento mide el grado de dependencia entre dos o ms elementos. Estos elementos pueden ser mdulos, clases o cualquier componente de software. Hay que tomar en cuenta que una alta cohesin puede provocar un alto acoplamiento, debido a que un componente que es pequeo (alta cohesin) necesita de ms elementos para completar una tarea, por lo que se incrementa el nmero de relaciones entre los componentes (alto acoplamiento), por ello es necesario introducir el concepto de balance, el cual permite tener un equilibrio entre los conceptos de cohesin y acoplamiento. Spring por default promueve el desarrollo de sistemas con un bajo acoplamiento y una alta cohesin, aplicando los conceptos de DI (Dependency Injection) y AOP (Aspect Oriented Programming). Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 8 Experiencia y Conocimiento para tu Vida Una patrn de diseo es una gua y que a su vez nos permite resolver un problema que se presenta de manera repetitiva. Cuando hablamos de las capas de una arquitectura JEE, cada capa puede tener varios patrones de diseo como podemos observar en la figura. En la capa de presentacin podemos observar el patrn MVC (Modelo Vista Controlador), y su objetivo es dividir las responsabilidades en estos 3 rubros. El patrn DTO (Data Transfer Object) representa un objeto del dominio del problema. Este patrn aparece en las 3 capas debido a que se utiliza para transferir una entidad o una lista de entidades de cierto tipo entre las distintas capas de la aplicacin. En la capa de Servicio o Negocio, tenemos el patrn Business Delegate el cual se encarga de los detalles en la llamada a algn mtodo de servicio. A su vez tenemos el patrn Service Locator, el cual es utilizado por el patrn Business Delegate para localizar los servicios cuando se utiliza el directorio Java JNDI. En la capa de datos tenemos el patrn DAO, el cual nos ayuda a extraer y almacenar informacin en la base de datos, utilizando los objetos DTO y/o de entidad. Existe un catlogo extenso de patrones de diseo para Java, el cual se puede consultar en: http://java.sun.com/blueprints/corej2eepatterns/Patterns/index.html Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 9 Experiencia y Conocimiento para tu Vida La programacin hacia interfaces significa que podemos cambiar la implementacin de alguna clase de manera programtica o declarativa. En la figura mostrada podemos observar un ejemplo involucrando la capa de servicio y la capa de datos. En este ejemplo la capa de servicio utiliza dentro del Bean de Servicio un tipo de la interfaz iDAO. Posteriormente y en tiempo de ejecucin se debe inyectar una implementacin de esta interfaz. En la figura podemos observar que se puede inyectar una implementacin del DAO utilizando ya sea el framework de Hibernate o de iBatis, aunque en la realidad puede ser cualquier tecnologa la que implementa esta interfaz. Los beneficios de utilizar tipos de Interfaz en lugar de clases concretas son varios: El bean de servicio no se ve afectado si se cambia la implementacin La implementacin puede utilizar fuentes de datos reales o de prueba Permite realizar pruebas unitarias ms fcilmente, en este caso sobre el Bean de Servicio Permite reducir la dependencia entre las clases, adems no se requiere conocer el detalle de la implementacin, entre varios beneficios ms El framework de Spring promueve el uso de la programacin orientada a Interfaces y no usar directamente clases concretas. Esto se puede lograr ya sea de manera declarativa por medio del descriptor xml de Spring o por medio de anotaciones tambin de Spring. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 10 Experiencia y Conocimiento para tu Vida El Contenedor de Spring es una fbrica de objetos. La idea principal es administrar los objetos y sus dependencias aplicando el concepto de Inyeccin de Dependencias. Adems, aplicando el concepto de AOP se puede modificar un POJO en una clase mucho ms robusta, por ejemplo, en un POJO transaccional, y todo esto sucede dentro del contenedor de Spring Como podemos observar en la figura, Spring por medio de su fbrica se encarga de instanciar los objetos que sean necesarios, de tal manera que se crea un rbol de objetos. La configuracin de estos objetos se realiza ya sea en el archivo descriptor de Spring, comnmente llamado applicationContext.xml o por medio de anotaciones de Spring. En el ejemplo podemos observar que un Bean de la capa de Presentacin, necesita utilizar un servicio de la Fbrica de Spring. A su vez la fbrica revisa las dependencias del objeto solicitado e instancia cada uno de los objetos del menos al ms dependiente (primero dataSource y luego daoHibernate). En caso de que la fbrica ya tenga estos objetos, y dependiendo de cmo se haya configurado, puede que ya no se vuelvan a instanciar, ya que por default se aplica el patrn de diseo Singleton, el cual significa que nicamente existe una instancia del Bean en memoria. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 11 Experiencia y Conocimiento para tu Vida La configuracin de Spring puede realizarse por medio del descriptor xml normalmente conocido como applicationContext.xml. Una de las ventajas derivadas de utilizar el contenedor de Spring es que ya no es necesario crear los objetos por nuestra cuenta, es decir, ya no observaremos el operador new ClaseServicio() en nuestro cdigo. Lo anterior permite crear cdigo ms limpio y delegar la configuracin de la aplicacin a Spring. Al crear y configurar las clases utilizando Spring permite escribir cdigo modular, fcil de probar, integrando dependencias muy fcilmente y promoviendo el uso de POJOs, pudindolos robustecer por medio de AOP. En la figura podemos observar un ejemplo de configuracin de un Bean de Spring dentro del archivo applicationContext.xml y por otro lado la obtencin del mismo dentro de una clase Java. Lo anterior es tan solo un ejemplo de lo que estaremos realizando en nuestros ejercicios de configuracin con Spring, ya que existen muchas maneras de configurarlo y de obtener los objetos a partir del contenedor de Spring. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 12 Experiencia y Conocimiento para tu Vida Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 13 Experiencia y Conocimiento para tu Vida Como podemos observar en la figura, en la programacin tradicional una clase (Main) es la responsable de instanciar los objetos con los cuales tiene dependencia, y a su vez cada objeto vuelve a ser responsable de instanciar sus dependencias y completarlas. Este esquema lleva a configuraciones poco flexibles y difciles de mantener. En el esquema de Inversin de Control (IoC) podemos observar que la clase Main recibe los objetos ya configurados, con todo y sus dependencias. El contenedor logra completar estas dependencias a travs del Principio de Hollywood: No me llames, yo te llamar. Uno de los mayores beneficios de la inversin de control es la separacin de mdulos y la forma en cmo se conectan dichos componentes. Esto permite minimizar la dependencia entre ellos. La inyeccin de dependencias (DI) es una forma de Inversin de Control. La tarea del contenedor es inyectar las dependencias a cada objeto segn se haya plasmado ya sea en el archivo de configuracin o por medio de anotaciones Java. En la figura el Inyector de Dependencias (contenedor) es el responsable de revisar cada una de las dependencias y completar tareas que anteriormente eran responsabilidad de la clase Main. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 14 Experiencia y Conocimiento para tu Vida El problema planteado en la figura es que la Clase A tiene dependencias con 2 servicios. Cada Servicio a su vez debe ser instanciado y administrado por la Clase A para poder ser utilizado. Lo anterior nos lleva a los siguientes problemas: Para reemplazar o actualizar las dependencias se debe cambiar el cdigo de la Clase A Las implementaciones concretas de los Servicios A y B depende estar disponibles en tiempo de compilacin Las clases son difciles de probar (Unit Test) debido a que tienen dependencias directas. Lo que implica que los servicios no pueden sustituirse por clases de tipo stub o mocks. Las clases normalmente contienen cdigo repetido para crear, localizar y gestionar sus dependencias. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 15 Experiencia y Conocimiento para tu Vida En la figura podemos observar una configuracin general para la inyeccin de dependencias. Existen dos nuevos conceptos, el primero es el concepto de la Fbrica y el segundo es el manejo de interfaces para los servicios. La Fabrica o Builder (1) nos permite gestionar las dependencias que se necesitan para terminar de instanciar nuestras clases, en este caso la Clase A necesita de una dependencia del Servicio A, el cual es proporcionada por la fbrica (2). Como se puede observar la Clase A no tiene una relacin directa con la clase concreta (Servicio A) sino con una interfaz IServicio A (3). Lo anterior nos permite lograr de manera ms eficiente los siguientes puntos: Desacoplar las dependencias, permitiendo cambiar o actualizar en cualquier momento la implementacin los servicios Escribir clases que dependen de en otras clases cuya implementacin no es conocida en tiempo de compilacin Poder probar las clases de manera aislada, sin utilizar las dependencias Eliminar la responsabilidad de las clases a crear y localizar las dependencias Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 16 Experiencia y Conocimiento para tu Vida Con el framework de Spring uno de los retos es aprender nuevamente a instanciar y configurar nuestras clases, debido a que ya no obtenemos los objetos por medio del operador new sino a travs del contenedor IoC. Existen varias formas de realizar la inyeccin de dependencias en el contenedor: Por medio del constructor de la clase: Los valores y/o referencias de Beans son inyectados a travs del constructor de la clase. Por medio de los mtodos setters de las propiedades de una clase: Una vez que el objeto es creado, los valores son asignados por medio del mtodo set de la propiedad. Por medio de interfaces. Este es el mtodo menos comn. Los componentes a inyectar deben implementar una interface segn el tipo que se necesite. Cul es el mejor mtodo para inyectar dependencias? Esto depende de en qu momento se tienen disponibles y/o en qu momento se requiere que estn disponibles las dependencias. Cabe sealar que la inyeccin por setter es la ms utilizada. A su vez, la inyeccin de dependencias se puede configurar ya sea en el archivo descriptor xml o por medio del uso de anotaciones de Spring. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 17 Experiencia y Conocimiento para tu Vida Podemos observar en la figura la inyeccin de dependencias por Constructor. En este caso la configuracin se realiza en el archivo descriptor de Spring applicationContext.xml, aunque el nombre puede ser cualquier otro. Posteriormente una vez que hemos definido nuestra clase (HibernateDao) hemos definido un constructor con 2 argumentos. El primer argumento es una variable que referencia a un objeto de tipo DataSource. El segundo argumento es un tipo int primitivo. En el contenedor de Spring podemos definir todos los beans que necesitemos inyectar a su vez a otros beans. Esto generar un rbol de dependencia de beans. En algunos IDEs como el SpringSource Tool Suite es posible observar ese conjunto de relaciones de manera grfica analizando el archivo descriptor de Spring. La configuracin mostrada tiene como objetivo crear un objeto hibernateDao cuando se le es requerido, y al momento de la construccin del objeto (en el constructor) se le inyectarn los valores que necesita para ser inicializado correctamente. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 18 Experiencia y Conocimiento para tu Vida En la figura observamos la forma de hacer inyeccin de dependencias por medio de setters. Esto quiere decir que el contenedor de Spring primero crear la instancia (hibernateDao) y posteriormente le inyectar los valores a las propiedades dataSource y timeOut por medio de sus mtodos setter. Podemos observar algo importante en la propiedad jdbcTemplate. El mtodo setJdbcTemplate no existe en nuestro cdigo, esto se debe a que la dependencia que tenemos es con la clase DataSource. Para poder inicializar el objeto JdbcTemplate es necesario proporcionar un objeto dataSource en su constructor. Esta dependencia se inyecta por medio del mtodo setDataSource. Cabe resaltar que la notacin de los JavaBeans no exige que exista una propiedad llamada dataSource en nuestra clase. La fbrica de Spring inyecta la propiedad utilizando el mtodo set de la propiedad indicada, as que si tenemos el tag <property name="dataSource" /> indirectamente se mandar llamar el mtodo setDataSource de la clase HibernateDao para inyectar la referencia. La configuracin anterior tiene como objetivo solicitar un objeto hibernateDao listo para ejecutar consultas a una Base de Datos. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 19 Experiencia y Conocimiento para tu Vida La inyeccin de dependencias es un concepto simple pero poderoso, pero requiere de una implementacin sofisticada para llegar a su mximo potencial. Algunas de las ventajas de la inyeccin de dependencia son: Reduccin de dependencias entre objetos El cdigo est auto documentado, ya que describe sus dependencias Se puede aplicar una configuracin de dependencias en un solo lugar Pruebas unitarias ms simples Reduce la complejidad y orienta la programacin hacia el uso de interfaces y no hacia clases concretas Algunas de las caractersticas de la inyeccin de independencia son: Manejo de Instancias en distintos alcances: Instancias compartidas, obtenidas a partir de un pool, etc. Manejo de dependencias va listas, mapas o estructuras set. Soporte para conversin de tipos Mtodos de tipo callback no intrusiva. Un mtodo callback es cuando se enva cdigo ejecutable (ej. Una clase) como un argumento a otro mtodo. Instanciamiento de objetos va mtodos de la fbrica de Beans. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 20 Experiencia y Conocimiento para tu Vida Para instanciar la fbrica de los beans, es necesario primero cargar el archivo descriptor en un objeto de tipo Resource, el cual es una interface. Posteriormente, debemos instanciar el objeto bean factory proporcionando el tipo Resource obtenido. Una de las implementaciones de BeanFactory es XmlBeanFactory. Nuestra aplicacin interacta directa o indirectamente con el objeto BeanFactory para poder obtener los beans de Spring incluyendo sus dependencias. El objeto BeanFactory cuando se crea, lee (parsea) el archivo descriptor xml de Spring, y es en este momento cuando se revisan e inyectan las dependencias de los Beans. Una vez que ya se ha ledo y cargado en memoria el contenido del descriptor xml, es posible obtener los Beans de Spring va el objeto BeanFactory. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 21 Experiencia y Conocimiento para tu Vida Existen varias maneras de instanciar el objeto BeanFactory. El mtodo a seleccionar depende del tipo de clase o integracin que cree la instancia de la fbrica. Los 2 mtodos ms comunes son: Configuracin va XMLBeanFactory Configuracin va ClassPathXmlApplicationContext Sin importar qu mtodo hayamos seleccionado para iniciar la fbrica de Spring, una vez que ya tenemos el objeto instanciado, podemos solicitar cualquier de los beans de la fbrica, incluyendo sus dependencias simplemente utilizando el id o nombre del bean. Para una referencia ms detallada de la configuracin de las variantes de BeanFactory, su obtencin y configuracin se puede consultar: http://book.javanb.com/Professional-Java-Development-with-the-Spring-Framework/BBL0022.html Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 22 Experiencia y Conocimiento para tu Vida El trmino bean se utiliza para referirse a cualquier componente administrado por la fbrica de Spring. Dichas clases siguen la terminologa de los JavaBeans: Clase con constructor vaco o sin argumentos Atributos privados Por cada atributo privado, se genera su mtodo get y set (getters y setters) Al configurar un bean de Spring se puede especificar: El nombre completamente calificado de la clase La referencia hacia otros beans (dependencias) Entre otro tipo de configuraciones posibles Al definir un bean en el descriptor de Spring, podemos especificar las siguientes atributos: Nombre de la clase (class) Nombre del Bean (name) Alcance de la Clase (scope) Argumentos del constructor (constructor arguments) Propiedades (properties) Modo de Auto-inyeccin (autowiring) Modo de inicio retardado ( lazy-initialization mode) Mtodo de inicializacin del bean (initialization method) Mtodo de destruccin del bean (destruction method) Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 23 Experiencia y Conocimiento para tu Vida El nombre del archivo puede ser cualquiera, siendo comnmente llamado applicationContext.xml Normalmente el archivo de configuracin de Spring se coloca en la raz del classpath para facilitar su acceso. Spring permite configurar los descriptores soportando las versiones anteriores, la nica restriccin sera que las nuevas caractersticas de las ltimas versiones no funcionaran. Cada bean se define dentro de una etiqueta <bean> dentro de la etiqueta <beans>. El atributo id es utilizado para asignar el nombre del bean y debe ser nico. El atributo class especifica el tipo del bean (clase del bean). Es posible utilizar el atributo name para especificar nombres alternativos del bean (separados por coma). El nombre que toma prioridad es el atributo id. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 24 Experiencia y Conocimiento para tu Vida La inyeccin de parmetros o valores a las propiedades en Spring es muy variado. Tenemos las siguientes: Valores simples Beans Colecciones Propiedades definidas en archivos externos Entre otros Podemos utilizar los tipos anteriores ya sea en inyecciones por propiedades (setters) o va el Constructor del bean. Para relacionar dependencias entre clases, ambos beans ya deben estar declarados y se debe utilizar la etiqueta <ref> dentro de las etiquetas <property> o <constructor-arg> del bean objetivo. El bean a inyectar no tiene que ser exactamente del mismo tipo, las variantes pueden ser: Tipo interface Subtipo de la clase Tipo de la clase Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 25 Experiencia y Conocimiento para tu Vida Spring puede auto inyectar (autowiring) las dependencias a travs de la introspeccin de las clases bean, de manera que no tengamos que declarar de manera explcita dichas dependencias en el archivo descriptor. El uso de las anotaciones sustituye la configuracin en el archivo descriptor, esto descentraliza la configuracin de Spring, pero tiene el beneficio de la simplificacin de la configuracin de dependencias. Las propiedades de los beans que tienen dependencias se pueden auto inyectar ya sea por nombre de la propiedad o por la igualacin del tipo de dato. Los argumentos del constructor que tienen dependencias se pueden auto inyectar por medio de la igualacin del tipo de datos. El uso de autowiring se debe usar con precaucin debido a que ya no tenemos una configuracin centralizada, y el entendimiento del sistema puede ser algo "oscuro" para nuevos programadores. Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 26 Experiencia y Conocimiento para tu Vida Para hacer autowiring es necesario indicar el paquete que incluye las clases donde queremos inyectar de manera automtica las dependencias. Este paquete Java se indica en el descriptor de Spring. Una vez que hemos indicado la clase, debemos agregar ya sea al constructor, propiedad o mtodo set respectivo la anotacin @Autowired de Spring. Con ello lograremos que la fbrica de Spring busque la dependencia a inyectar. Para realizar esta bsqueda podemos indicar en la anotacin el tipo de autowiring que queremos manejar. Los tipos de autowiring son: Por nombre: Ej. autowire = "nombre adf Por tipo: Ej. autowire = "tipo asdf Por constructor: ej. autowire="constructor adsf Por autodeteccin: Ej. autowire="autodetect asdf Curso de Spring Framework Todos los Derechos Reservados Global Mentoring 2011 27