27
Experien cia y Conocimiento para tu Vida 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 más avanzados del fr amew or k Java s ut il iz ad o en lo s úl ti mos años pa ra ap li caci on es empresariales. Al final de este cur so crearemos un proyecto, el cual utiliza las mejores prácticas de desarrollo en 3 capas, incluyendo patrones de diseño como son MVC, DAO, Factory, DTO, entre otros. Este proyecto puede usarse como la base para el desarrollo de pro ye ctos empresariales propios utilizand o el framework de Spring como orquestador de la capa de servicio. Por med io de eje mpl os prá ctic os rev isaremos las car act erí sti cas de este framew or k, a su vez utilizaremos he rr amientas de de sarrollo qu e nos permitirán crear más rápidamente nuestras aplicaciones Java con Spring, así como la integración con otros frameworks. 1 Todos los Derechos Reservados Global Mentoring 2011 Curso de Spring Framework 

eBook Spring Framework.pdf

Embed Size (px)

Citation preview

  • Experiencia y Conocimiento para tu Vida

    Este curso est dirigido a gente interesada en el desarrollo de aplicacionesJEE con Spring. Este framework permite agilizar y simplificar en gran medidael desarrollo de aplicaciones JEE.

    Estudiaremos desde los fundamentos hasta conceptos ms avanzados delframework Java ms utilizado en los ltimos aos para aplicacionesempresariales.

    Al final de este curso crearemos un proyecto, el cual utiliza las mejoresprcticas de desarrollo en 3 capas, incluyendo patrones de diseo como sonMVC, DAO, Factory, DTO, entre otros. Este proyecto puede usarse como labase para el desarrollo de proyectos empresariales propios utilizando elframework de Spring como orquestador de la capa de servicio.

    Por medio de ejemplos prcticos revisaremos las caractersticas de esteframework, a su vez utilizaremos herramientas de desarrollo que nospermitirn crear ms rpidamente nuestras aplicaciones Java con Spring, ascomo la integracin con otros frameworks.

    1Todos 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 desarrollode aplicaciones empresariales. Es uno de los frameworks ms utilizadosal da de hoy y no es casualidad. El objetivo de Spring es simplificar eldesarrollo de aplicaciones empresariales Java.

    A grandes rasgos, un framework es un conjunto de clases que nospermiten resolver un problema en especfico. En el caso particular deSpring, nos permite resolver muchos de los problemas que se presentanal desarrollar aplicaciones con tecnologa JEE (Java Enterprise Edition)

    Una de las mayores ventajas de Spring, es la forma modular en el quefue creado, permitiendo habilitar/deshabilitar las caractersticas a utilizarsegn se requiera.

    La pgina oficial de Spring es www.springsource.org donde se puedenencontrar todos los proyectos relacionados con dicha tecnologa.

    Spring es utilizado en proyectos muy diversos, como puede ser enInstituciones Bancarias, Aseguradoras, Instituciones Educativas y deGobierno, 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 unbajo 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 yotra 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 suministrarobjetos a una clase (POJO) que tiene dependencias, en lugar de ser ellamisma sea quien los proporcione.

    AOP (Aspect Oriented Programming): AOP es un paradigma deprogramacin que permite modularizar las aplicaciones y mejorar laseparacin de responsabilidades entre mdulos y/o clases.

    Las caractersticas anteriores son la base para la creacin de contenedoresligeros (lightweight containers). Spring es uno de los contenedores ligeros mscompletos 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 deellos o todos, dependiendo de la naturaleza de la aplicacin. En la figura podemosobservar algunos de los mdulos principales del Framework de Spring. Acontinuacin 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 Inversionof Control (IoC) o tambin conocido como Dependency Injection (DI).

    2. Spring Context: Aqu es donde se realiza la configuracin del framework. Incluyela configuracin de servicios empresariales tales como JNDI, EJB,Internacionalizacin, validacin, entre varios ms.

    3. Spring AOP: Permite aplicar los conceptos de Programacin Orientada aAspectos (AOP), adems incluye clases de soporte para el manejo transaccional,la seguridad, entre varias clases ms, permitiendo desacoplar estascaractersticas 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 lacapa 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 tieneuna 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 lacapa de presentacin, la capa de negocio y la capa de datos. Aunque lo ms comnes que se combine con otras tecnologas y Spring quede como el orquestador de lacapa 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 unnavegador Web, un cliente mvil, una aplicacin de escritorio, entre otros.

    Capa Web: la capa web que puede residir en un servidor web, las tecnologasmas bsicas que podemos encontrar en este servidor web son los JSPs y losServlets.

    Capa de Negocio: en esta capa podemos encontrar tecnologa como son losEnterprise Java Beans (EJBs) o frameworks como Spring.

    Capa de Datos: aqu vamos a encontrar tecnologas como JDBC, Hibernate, entreotras. Este cdigo nos va a permitir comunicarnos con nuestra base de datos paraleer 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 sudiseo puede impactar de manera directa en el tiempo y costo asociado pararealizar dichos cambios.

    La cohesin es la medida en la que un componente se dedica a realizarsolamente la tarea para la cual fue creado, delegando las tareascomplementarias a otros componentes.

    El acoplamiento mide el grado de dependencia entre dos o ms elementos.Estos elementos pueden ser mdulos, clases o cualquier componente desoftware.

    Hay que tomar en cuenta que una alta cohesin puede provocar un altoacoplamiento, debido a que un componente que es pequeo (alta cohesin)necesita de ms elementos para completar una tarea, por lo que seincrementa el nmero de relaciones entre los componentes (altoacoplamiento), por ello es necesario introducir el concepto de balance, el cualpermite tener un equilibrio entre los conceptos de cohesin y acoplamiento.

    Spring por default promueve el desarrollo de sistemas con un bajoacoplamiento 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 unproblema que se presenta de manera repetitiva. Cuando hablamos de lascapas de una arquitectura JEE, cada capa puede tener varios patrones dediseo como podemos observar en la figura.

    En la capa de presentacin podemos observar el patrn MVC (Modelo VistaControlador), y su objetivo es dividir las responsabilidades en estos 3 rubros.El patrn DTO (Data Transfer Object) representa un objeto del dominio delproblema. Este patrn aparece en las 3 capas debido a que se utiliza paratransferir una entidad o una lista de entidades de cierto tipo entre las distintascapas de la aplicacin.

    En la capa de Servicio o Negocio, tenemos el patrn Business Delegate elcual se encarga de los detalles en la llamada a algn mtodo de servicio. A suvez tenemos el patrn Service Locator, el cual es utilizado por el patrnBusiness Delegate para localizar los servicios cuando se utiliza el directorioJava JNDI.

    En la capa de datos tenemos el patrn DAO, el cual nos ayuda a extraer yalmacenar informacin en la base de datos, utilizando los objetos DTO y/o deentidad.

    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 laimplementacin de alguna clase de manera programtica o declarativa.

    En la figura mostrada podemos observar un ejemplo involucrando la capa deservicio y la capa de datos. En este ejemplo la capa de servicio utiliza dentrodel Bean de Servicio un tipo de la interfaz iDAO.

    Posteriormente y en tiempo de ejecucin se debe inyectar unaimplementacin de esta interfaz. En la figura podemos observar que se puedeinyectar una implementacin del DAO utilizando ya sea el framework deHibernate o de iBatis, aunque en la realidad puede ser cualquier tecnologa laque implementa esta interfaz.

    Los beneficios de utilizar tipos de Interfaz en lugar de clases concretas sonvarios: 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 aInterfaces y no usar directamente clases concretas. Esto se puede lograr yasea de manera declarativa por medio del descriptor xml de Spring o por mediode 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 esadministrar los objetos y sus dependencias aplicando el concepto deInyeccin de Dependencias. Adems, aplicando el concepto de AOP se puedemodificar un POJO en una clase mucho ms robusta, por ejemplo, en unPOJO transaccional, y todo esto sucede dentro del contenedor de Spring

    Como podemos observar en la figura, Spring por medio de su fbrica seencarga de instanciar los objetos que sean necesarios, de tal manera que secrea un rbol de objetos.

    La configuracin de estos objetos se realiza ya sea en el archivo descriptor deSpring, comnmente llamado applicationContext.xml o por medio deanotaciones 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 revisalas dependencias del objeto solicitado e instancia cada uno de los objetos delmenos al ms dependiente (primero dataSource y luego daoHibernate).

    En caso de que la fbrica ya tenga estos objetos, y dependiendo de cmo sehaya configurado, puede que ya no se vuelvan a instanciar, ya que por defaultse aplica el patrn de diseo Singleton, el cual significa que nicamente existeuna 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 xmlnormalmente conocido como applicationContext.xml.

    Una de las ventajas derivadas de utilizar el contenedor de Spring es que ya noes necesario crear los objetos por nuestra cuenta, es decir, ya noobservaremos el operador new ClaseServicio() en nuestro cdigo.

    Lo anterior permite crear cdigo ms limpio y delegar la configuracin de laaplicacin a Spring.

    Al crear y configurar las clases utilizando Spring permite escribir cdigomodular, fcil de probar, integrando dependencias muy fcilmente ypromoviendo el uso de POJOs, pudindolos robustecer por medio de AOP.

    En la figura podemos observar un ejemplo de configuracin de un Bean deSpring dentro del archivo applicationContext.xml y por otro lado la obtencindel mismo dentro de una clase Java.

    Lo anterior es tan solo un ejemplo de lo que estaremos realizando en nuestrosejercicios de configuracin con Spring, ya que existen muchas maneras deconfigurarlo 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 unaclase (Main) es la responsable de instanciar los objetos con los cuales tienedependencia, y a su vez cada objeto vuelve a ser responsable de instanciarsus dependencias y completarlas. Este esquema lleva a configuraciones pocoflexibles y difciles de mantener.

    En el esquema de Inversin de Control (IoC) podemos observar que la claseMain recibe los objetos ya configurados, con todo y sus dependencias. Elcontenedor logra completar estas dependencias a travs del Principio deHollywood: No me llames, yo te llamar.

    Uno de los mayores beneficios de la inversin de control es la separacin demdulos y la forma en cmo se conectan dichos componentes. Esto permiteminimizar la dependencia entre ellos.

    La inyeccin de dependencias (DI) es una forma de Inversin de Control. Latarea del contenedor es inyectar las dependencias a cada objeto segn sehaya plasmado ya sea en el archivo de configuracin o por medio deanotaciones Java.

    En la figura el Inyector de Dependencias (contenedor) es el responsable derevisar cada una de las dependencias y completar tareas que anteriormenteeran 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 2servicios. Cada Servicio a su vez debe ser instanciado y administrado por laClase A para poder ser utilizado.

    Lo anterior nos lleva a los siguientes problemas:

    Para reemplazar o actualizar las dependencias se debe cambiar el cdigode la Clase A

    Las implementaciones concretas de los Servicios A y B depende estardisponibles en tiempo de compilacin

    Las clases son difciles de probar (Unit Test) debido a que tienendependencias directas. Lo que implica que los servicios no puedensustituirse por clases de tipo stub o mocks.

    Las clases normalmente contienen cdigo repetido para crear, localizar ygestionar 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 dedependencias. Existen dos nuevos conceptos, el primero es el concepto de laFbrica y el segundo es el manejo de interfaces para los servicios.

    La Fabrica o Builder (1) nos permite gestionar las dependencias que senecesitan para terminar de instanciar nuestras clases, en este caso la Clase Anecesita de una dependencia del Servicio A, el cual es proporcionada por lafbrica (2).

    Como se puede observar la Clase A no tiene una relacin directa con la claseconcreta (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 encualquier momento la implementacin los servicios

    Escribir clases que dependen de en otras clases cuya implementacin noes 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 ainstanciar y configurar nuestras clases, debido a que ya no obtenemos losobjetos por medio del operador new sino a travs del contenedor IoC.Existen varias formas de realizar la inyeccin de dependencias en elcontenedor:

    Por medio del constructor de la clase: Los valores y/o referencias deBeans 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 delmtodo set de la propiedad.

    Por medio de interfaces. Este es el mtodo menos comn. Loscomponentes a inyectar deben implementar una interface segn el tipo quese necesite.

    Cul es el mejor mtodo para inyectar dependencias? Esto depende de enqu momento se tienen disponibles y/o en qu momento se requiere queestn disponibles las dependencias. Cabe sealar que la inyeccin por setteres la ms utilizada.

    A su vez, la inyeccin de dependencias se puede configurar ya sea en elarchivo 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 SpringapplicationContext.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 tipoDataSource. El segundo argumento es un tipo int primitivo.

    En el contenedor de Spring podemos definir todos los beans que necesitemosinyectar a su vez a otros beans. Esto generar un rbol de dependencia debeans. En algunos IDEs como el SpringSource Tool Suite es posible observarese conjunto de relaciones de manera grfica analizando el archivo descriptorde Spring.

    La configuracin mostrada tiene como objetivo crear un objeto hibernateDaocuando se le es requerido, y al momento de la construccin del objeto (en elconstructor) se le inyectarn los valores que necesita para ser inicializadocorrectamente.

    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 pormedio de setters. Esto quiere decir que el contenedor de Spring primerocrear la instancia (hibernateDao) y posteriormente le inyectar los valores alas propiedades dataSource y timeOut por medio de sus mtodos setter.

    Podemos observar algo importante en la propiedad jdbcTemplate. El mtodosetJdbcTemplate no existe en nuestro cdigo, esto se debe a que ladependencia que tenemos es con la clase DataSource.

    Para poder inicializar el objeto JdbcTemplate es necesario proporcionar unobjeto dataSource en su constructor. Esta dependencia se inyecta por mediodel mtodo setDataSource.

    Cabe resaltar que la notacin de los JavaBeans no exige que exista unapropiedad llamada dataSource en nuestra clase. La fbrica de Spring inyectala propiedad utilizando el mtodo set de la propiedad indicada, as que sitenemos el tag indirectamente semandar llamar el mtodo setDataSource de la clase HibernateDao parainyectar la referencia.

    La configuracin anterior tiene como objetivo solicitar un objeto hibernateDaolisto 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, perorequiere 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 archivodescriptor en un objeto de tipo Resource, el cual es una interface.

    Posteriormente, debemos instanciar el objeto bean factory proporcionando eltipo Resource obtenido.

    Una de las implementaciones de BeanFactory es XmlBeanFactory.

    Nuestra aplicacin interacta directa o indirectamente con el objetoBeanFactory para poder obtener los beans de Spring incluyendo susdependencias.

    El objeto BeanFactory cuando se crea, lee (parsea) el archivo descriptor xmlde Spring, y es en este momento cuando se revisan e inyectan lasdependencias de los Beans.

    Una vez que ya se ha ledo y cargado en memoria el contenido del descriptorxml, 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 aseleccionar depende del tipo de clase o integracin que cree la instancia de lafbrica.

    Los 2 mtodos ms comunes son:

    Configuracin va XMLBeanFactory

    Configuracin va ClassPathXmlApplicationContext

    Sin importar qu mtodo hayamos seleccionado para iniciar la fbrica deSpring, una vez que ya tenemos el objeto instanciado, podemos solicitarcualquier de los beans de la fbrica, incluyendo sus dependenciassimplemente utilizando el id o nombre del bean.

    Para una referencia ms detallada de la configuracin de las variantes deBeanFactory, 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 administradopor 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 lassiguientes 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 llamadoapplicationContext.xml

    Normalmente el archivo de configuracin de Spring se coloca en la raz delclasspath para facilitar su acceso.

    Spring permite configurar los descriptores soportando las versiones anteriores,la nica restriccin sera que las nuevas caractersticas de las ltimasversiones no funcionaran.

    Cada bean se define dentro de una etiqueta dentro de la etiqueta. El atributo id es utilizado para asignar el nombre del bean y debeser nico. El atributo class especifica el tipo del bean (clase del bean).

    Es posible utilizar el atributo name para especificar nombres alternativos delbean (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 muyvariado. 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 estardeclarados y se debe utilizar la etiqueta dentro de las etiquetas o del bean objetivo.

    El bean a inyectar no tiene que ser exactamente del mismo tipo, las variantespueden 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 laintrospeccin de las clases bean, de manera que no tengamos que declararde 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 lasimplificacin de la configuracin de dependencias.

    Las propiedades de los beans que tienen dependencias se pueden autoinyectar ya sea por nombre de la propiedad o por la igualacin del tipo dedato.

    Los argumentos del constructor que tienen dependencias se pueden autoinyectar por medio de la igualacin del tipo de datos.

    El uso de autowiring se debe usar con precaucin debido a que ya notenemos una configuracin centralizada, y el entendimiento del sistema puedeser 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 clasesdonde queremos inyectar de manera automtica las dependencias. Estepaquete 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 ainyectar. Para realizar esta bsqueda podemos indicar en la anotacin el tipode 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