Curso Spring - Leccion 02 - Configuracion de Spring Framework

download Curso Spring - Leccion 02 - Configuracion de Spring Framework

of 11

Transcript of Curso Spring - Leccion 02 - Configuracion de Spring Framework

  • 7/29/2019 Curso Spring - Leccion 02 - Configuracion de Spring Framework

    1/11

    Experiencia y Conocimiento para tu Vida

    urso de Spring Framework

    Todos los Derechos Reservados Global Mentoring 2012 1

  • 7/29/2019 Curso Spring - Leccion 02 - Configuracion de Spring Framework

    2/11

    Experiencia y Conocimiento para tu Vida

    Spring es un proyecto de cdigo abierto (open source), originalmente creadopor Rod Johnson y descrito en su libro Expert One-on-One: J2EE Design andDevelopment. Spring fue creado con el objetivo de simplificar la complejidadde las aplicaciones empresariales J2EE, permitiendo utilizar POJOs oJavaBeans al utilizarlo, con el objetivo de agregar funcionalidad quenicamente era posible con EJBs.

    Como podemos observar en la figura, al definir un EJB en la versin 2,estbamos OBLIGADOS a implementar una interface y algunas clases ms, ypor si fuera poco, debamos agregar varios mtodos para cumplir con elcontrato de la interfaz EJB.

    Este tipo de solucin se conoce como cdigo Intrusivo, lo que significa quenosotros debemos adecuarnos al cdigo requerido, en lugar de enfocarnos anuestro negocio.

    Podemos observar que el nico mtodo de negocio es el mtodo saluda().Todos los dems mtodos no tienen nada que ver con nuestro negocio, sinembargo para poder cumplir con la especificacin de los EJB 2.x, se debenagregar todos los dems mtodos mostrados.

    Esta fue solo una de muchas razones por las cuales fue creado Spring, entreotras fue simplificar la forma de hacer Test, promover el desarrollo orientado aInterfaces, uso de clases puras de Java (POJOs), entre varias ms.

    urso de Spring Framework

    Todos los Derechos Reservados Global Mentoring 2012 2

  • 7/29/2019 Curso Spring - Leccion 02 - Configuracion de Spring Framework

    3/11

    Experiencia y Conocimiento para tu Vida

    Spring permite simplificar no solamente alguna capa en una arquitectura Java,sino ayuda a Simplificar el Desarrollo al programar con Java en sutotalidad.

    Sin embargo Spring, no est limitado a aplicaciones empresariales, sino acualquier aplicacin estndar Java.

    Como podemos observar en la figura, nuestras clases Java, a diferencia delEJB, nicamente tiene el mtodo de negocio que nos interesa realmente.

    Spring, por medio de sus caractersticas principales como DI (Dependency

    Inyection) y AOP (Aspect Oriented Programming) permite agregarfuncionallidad que solamente un EJB poda tener anteriormente, es decir,transaccionalidad, seguridad, logging, entre muchas caractersticas ms, estonicamente con el uso de POJOs (Plain Old Java Objects) o lo que es lomismo, clases puras de Java.

    Las 4 estrategias de Spring para la simplificacin del desarrollo son:1. Framework ligero (lightweight) y poco intrusivo orientado a POJOs2. Bajo Acoplamiento a travs de Inyeccin de Dependencias y programacin

    Orientada a Interfaces3. Programacin Declarativa a travs de aspectos4. Reduccin de cdigo repetitivo (boilerplate) a travs de plantillas

    (templates) y aspectos

    urso de Spring Framework

    Todos los Derechos Reservados Global Mentoring 2012 3

  • 7/29/2019 Curso Spring - Leccion 02 - Configuracion de Spring Framework

    4/11

    Experiencia y Conocimiento para tu Vida

    Los desarrollos Java por lo general son sistemas de medianos a grandes, por ello esnecesario dividir las responsabilidades debido a que los equipos de programadores tambinsuele ser grandes.

    Una arquitectura Java por lo comn se divide en 3 capas: Capa de Presentacin, Capa deNegocio y Capa de Datos, pueden existir ms, pero estas son las ms representativas. Aldividir nuestra aplicacin en capas, es posible delegar responsabilidades a un equipo deprogramadores, dar mejor mantenimiento, integrar cambios ms rpidamente, entre muchosbeneficios ms.

    Por otro lado, una patrn de diseo es una gua, que a su vez nos permite resolver unproblema que se presenta de manera repetitiva. Cuando hablamos de las capas de unaarquitectura JEE (Java Enterprise Edition), cada capa puede tener varios patrones de diseocomo 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. Estepatrn aparece en las 3 capas debido a que se utiliza para transferir una entidad o una lista deentidades de cierto tipo entre las distintas capas de la aplicacin.

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

    En la capa de Servicio o Negocio, tenemos el patrn como Business Delegate el cual seencarga de los detalles en la llamada a algn mtodo de servicio. A su vez tenemos el patrnService Locator, el cual es utilizado por el patrn Business Delegate para localizar los

    servicios cuando se utiliza el directorio Java JNDI, sin embargo con Frameworks como Springy la Inyeccin de Dependencia este tipo de patrones ya no se utilizan.

    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

    urso de Spring Framework

    Todos los Derechos Reservados Global Mentoring 2012 4

  • 7/29/2019 Curso Spring - Leccion 02 - Configuracion de Spring Framework

    5/11

    Experiencia y Conocimiento para tu Vida

    La cohesin y el acoplamiento juegan un rol central en el diseo desoftware. Al disear nuestros mdulos se requerirn cambios posteriores, porlo que el diseo y arquitectura del software puede impactar de manera directaen el tiempo y costo asociado para realizar 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.

    Como podemos observar, el Componente de Impresin necesita de otroscomponentes para poder realizar su tarea de manera adecuada, ya que si

    realizara todas las tareas l mismo, cualquier cambio o modificacin serams complicado de realizar, llevando mayor tiempo y costo su mantenimiento.

    En el desarrollo de software, se busca que los componentes tenga una AltaCohesin, debido a que si los componente realizan una nica tarea, ser msfcil integrarlos en nuevos sistemas y/o reutilizar su cdigo, minimizando eltiempo y costo de mantenimiento de dicho componente.

    Spring por default promueve el desarrollo de sistemas con una alta cohesin,

    aplicando los conceptos de DI (Dependency Injection) y AOP (Aspect OrientedProgramming), los cuales estudiaremos a detalle en lecciones posteriores.

    urso de Spring Framework

    Todos los Derechos Reservados Global Mentoring 2012 5

  • 7/29/2019 Curso Spring - Leccion 02 - Configuracion de Spring Framework

    6/11

    Experiencia y Conocimiento para tu Vida

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

    Desde el punto de vista del diseo de software, buscamos un bajoacomplamiento, debido a que entre menos relaciones existan entrecomponentes, ms sencillo ser dar mantenimiento y/o reutilizar dichoscomponentes en otros sistemas.

    Entre ms relaciones existan entre los componentes, ms difcil sersepararlos, y por lo tanto su dependencia ser muy fuerte.

    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 bajo

    acoplamiento y una alta cohesin, aplicando los conceptos de DI(Dependency Injection) y AOP (Aspect Oriented Programming).

    urso de Spring Framework

    Todos los Derechos Reservados Global Mentoring 2012 6

  • 7/29/2019 Curso Spring - Leccion 02 - Configuracion de Spring Framework

    7/11

    Experiencia y Conocimiento para tu Vida

    La programacin orientada a Interfaces significa que podemos cambiar laimplementacin de alguna clase de manera programtica o declarativa en

    tiempo de ejecucin.

    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 visualizamos que se puedeinyectar una implementacin del DAO utilizando ya sea JDBC o Hibernate,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 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 as NO usar directamente clases concretas. Esto se puede lograrya sea de manera declarativa por medio del descriptor xml de Spring o pormedio de anotaciones, las cuales estudiaremos ms adelante.

    urso de Spring Framework

    Todos los Derechos Reservados Global Mentoring 2012 7

  • 7/29/2019 Curso Spring - Leccion 02 - Configuracion de Spring Framework

    8/11

    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 sepuede modificar un POJO en una clase mucho ms robusta, por ejemplo, enun POJO 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 de

    Spring, 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 se

    haya 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. Revisaremos la configuracin de Beans ams detalle.

    urso de Spring Framework

    Todos los Derechos Reservados Global Mentoring 2012 8

  • 7/29/2019 Curso Spring - Leccion 02 - Configuracion de Spring Framework

    9/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 MiBeanSpring() en nuestro cdigo.

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

    Al crear y configurar las clases y dependencias utilizando Spring permite

    escribir cdigo modular, fcil de probar, integrando dependencias muyfcilmente y promover el uso de POJOs, pudindolos robustecer por medio deAOP.

    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 nuestros

    ejercicios de configuracin con Spring, ya que existen muchas maneras deconfigurarlo y de obtener los objetos a partir del contenedor de Spring.

    urso de Spring Framework

    Todos los Derechos Reservados Global Mentoring 2012 9

  • 7/29/2019 Curso Spring - Leccion 02 - Configuracion de Spring Framework

    10/11

    Experiencia y Conocimiento para tu Vida

    El Ciclo de Vida de un Bean en Spring sigue una serie de pasos bien definidos.Podemos observar en figura esta serie de pasos.

    El inicio de un bean en Spring es en el momento en que se crea la instancia delmismo y se carga en el Application Context de Spring (Fbrica de Spring). Comopuedes observar, la fbrica de Spring ejecuta varios pasos antes de que un beanest listo para se utilizado. Los pasos generales son:

    1. Spring instancia el Bean.2. Spring inyecta los valores y las referencias de los beans en las propiedades del

    mismo.3. Si el bean implementa la interface BeanNameAware, Spring pasa el ID del bean al

    mtodo setBeanName().4. Si el bean implementa la interface BeanFactoryAware, Spring llama el mtodo

    setBeanFactory(), pasando el bean factory en si mismo.5. Si el bean implementa la interfaz ApplicationContextAware, Spring llama el

    mtodo setApplicationContext(), pasando una referencia del ApplicationContext.

    6. Si el bean implementa la interface BeanPostProcessor, Spring llama el mtodopostProcessBeforeInitialization().

    7. Si el bean implementa la interface InitializingBean, Spring llama al mtodoafterPropertiesSet(). Similarmente, si el mtodo contiene la declaracin deun init-method, entonces se llama el mtodo declarado.

    8. Si el bean implementa la interfaz BeanPostProcessor, Spring llama el mtodopostProcessAfterInitialization()

    9. En este punto, el bean est listo para utilizarse, y el bean permanece en la fbricahasta que el application Context es destruido.10. Si el bean implementa la interface DisposableBean, Spring llama al mtodo

    destroy(). As mismo, si el bean contiene una declaracin destroy-method,entonces el mtodo especificado se llamado.

    urso de Spring Framework

    Todos los Derechos Reservados Global Mentoring 2012 10

  • 7/29/2019 Curso Spring - Leccion 02 - Configuracion de Spring Framework

    11/11

    Experiencia y Conocimiento para tu Vida

    En este ejercicio configuraremos nuestro proyecto de Spring y revisaremoscomo instanciar un Bean, as como aplicar varios de los conceptosmencionados en esta leccin.

    urso de Spring Framework

    Todos los Derechos Reservados Global Mentoring 2012 11