Mns spring framework - Core

14
www.medianet.es Spring Framework Junio 2008 Media Net Software

Transcript of Mns spring framework - Core

Page 1: Mns spring framework - Core

www.medianet.es

Spring FrameworkJunio 2008

Media Net Software

Page 2: Mns spring framework - Core

SPRING FRAMEWORK2

INDICE Definición

3 Contenedor Central

7

Page 3: Mns spring framework - Core

SPRING FRAMEWORK3

DEFINICIONSpring es un framework de código abierto para el desarrollo de aplicaciones escrito en Java que soporta las versiones 1.3 y posteriores.

Fue lanzado en el 2003 basándose en el código fuente introducido por Rod Johnson en su libro Expert One-on-One J2EE Design and Development que refleja el éxito de sus proyectos comerciales.

SpringSource (antes Interface21) es la compañía que desarrolla y da soporte a Spring con un equipo de 40 personas.

SpringOne es la conferencia anual para la comunidad de Spring que lleva celebrándose desde el 2006.

Page 4: Mns spring framework - Core

SPRING FRAMEWORK4

Una de sus principales ventajas es la facilidad de integración con los estándares de Java y con las herramientas comerciales existentes, encargándose del acoplamiento entre objetos de la aplicación pero sin llegar a formar dependencias con el framework.

La forma de obtener un API que no invada el código es basándose en interfaces en lugar de clases.

Cuenta con una infraestructura ligera que permite desarrollar los componentes como POJOs, conteniendo sólo la lógica de negocio y escondiendo del programador la complejidad de la arquitectura.

Se ha popularizado al considerarlo como un sustituto de los Enterprise JavaBeans (EJBs).

DEFINICION

Page 5: Mns spring framework - Core

SPRING FRAMEWORK5 DEFINICION

Spring es una colección de subframeworks que resuelven problemas específicos y que están agrupados en módulos que pueden usarse de forma separada.

Inversion of Control Container:crea y configura objetos en una aplicación y los entrelaza. Los recursos son proveídos a los objetos, para que ellos no tengan que buscarlos.

Aspect-Oriented Programming framework:trata con funcionalidad que cruza transversalmente una aplicación, invocando métodos específicos en objetos específicos, para dar solución a un problema que se usa en múltiples lugares.

Data Access framework:evita la complejidad de utilizar el API de persistencia.

Transaction Management framework:provee funcionalidad para la administración de transacciones sin tener que afectar el código base.

Resource Abstraction framework:localiza archivos al configurar una aplicación.

Validation framework:valida objetos en aplicaciones web y se encarga de la internacionalización.

Page 6: Mns spring framework - Core

SPRING FRAMEWORK6 DEFINICION

Spring Web MVC:provee un framework MVC que maneja el mapeo de peticiones a controladores y de controladores a vistas. Excelente tratamiento de formularios y capacidades de validación.

Spring Web Flow:implementa flujos de proceso complejos y secuencias de ayuda de forma fácil y directa. Es un framework MVC basado en conversaciones.

Acegi Security System:agrega funciones de autenticación y autorización a objetos en una aplicación usando programación orientada a aspectos.

Remote Access framework:provee capacidades cliente-servidor a las aplicaciones por configuración. Objetos en el servidor pueden ser exportados como servicios remotos.

Spring Web Services:toma una aproximación por capas y separa el transporte de la implementación del servicio web tratándolo como un mecanismo de mensajes.

Spring JMX:exporta objetos a través de Java Management Extensions por configuración. Permite reconfigurar objetos remotamente sin necesidad de reiniciar la aplicación.

Page 7: Mns spring framework - Core

SPRING FRAMEWORK7

CONTENEDOR CENTRALProblema:Tener que escribir código que una a los objetos de una aplicación para que puedan colaborar ya sea creándolos o buscándolos.

Solución:Mover el código de configuración fuera de la aplicación y permitir que el framework se encargue de ensamblar los componentes.

La inyección de dependencias es la característica principal del contenedor central de Spring. Provee un mecanismo para pasar o inyectar dependencias a los objetos. Es una forma de inversión de control.

inversion of control

dependency lookup dependency injection

setter injection constructor injection

Page 8: Mns spring framework - Core

SPRING FRAMEWORK8 CONTENEDOR CENTRAL

El contenedor resuelve la inyección a través de un archivo de configuración.Ejemplo:package medianet;public class DemoBean{

private String name;public DemoBean(String name){this.name = name;}public void setName(String name){this.name = name;}

}

Setter injection: primero crea el objeto y después invoca los métodos modificadores.<beans>

<bean id=“bean” class=“medianet.DemoBean”><property name=“name” value=“Marcos”/>

</bean></beans>

Constructor injection: invoca un constructor para inyectar los objetos colaboradores.<beans>

<bean id=“bean” class=“medianet.DemoBean”><constructor-arg value=“Marcos”/>

</bean></beans>

Page 9: Mns spring framework - Core

SPRING FRAMEWORK9 CONTENEDOR CENTRAL

El contenedor central es básicamente una factoría para crear objetos a partir de archivos de configuración. Ejemplo:XmlBeanFactory f = new XmlBeanFactory(new FileSystemResource(“config.xml”));DemoBean b = (DemoBean)f.getBean(“bean”);

Los elementos <bean> en el archivo XML se convierten en objetos BeanDefinition de acuerdo a la siguiente información:

Creación: llamando al constructor designado, que sería el que no tiene argumentos si no se provee un elemento <constructor-arg>.

Configuración: una lista opcional de elementos <property> indica las inyecciones por método modificador que deben realizarse.

Inicialización: el contenedor puede opcionalmente llamar un método de inicialización. Manejo: el contenedor tiene dos formas, como singleton (regresa siempre la misma

instancia) y como prototype (crea y regresa una nueva instancia cada vez). Destrucción: los singletons pueden opcionalmente llamar un método de destrucción.

El orden de las definiciones no es relevante, el contenedor se encarga que los beans se creen correctamente.

Page 10: Mns spring framework - Core

SPRING FRAMEWORK10 CONTENEDOR CENTRAL

Por defecto, los beans son singletons, que se crean, configuran una vez y se almacenan en caché. Por otra parte, el contenedor no guarda registro de los beans prototypes.

Tanto la inicialización como la destrucción están disponibles para los beans al implementar una interfaz específica de Spring o al indicar un método personalizado en la definición. Estos métodos personalizados no tienen argumentos y sus valores de retorno son ignorados por el contenedor.

Inicialización: interfaz org.springframework.beans.factory.InitializingBean <bean id=“…” class=“…” init-method=“…”/>

Destrucción: interfaz org.springframework.beans.factory.DisposableBean <bean id=“…” class=“…” destroy-method=“…”/>

Page 11: Mns spring framework - Core

SPRING FRAMEWORK11 CONTENEDOR CENTRAL

Las etiquetas <property> y <constructor-arg> pueden utilizar etiquetas anidadas para pasar los parámetros:

<value> agrega un valor textualmente. <ref> hace referencia a otro bean. <list> para crear instancias de la jerarquía java.util.List. <map> para crear instancias de la jerarquía java.util.Map. <props> para crear instancias de la clase java.util.Properties. <set> para crear instancias de la jerarquía java.util.Set.

La factoría de beans utiliza PropertyEditors para convertir los valores ‘string’ del XML en el tipo destino de los métodos modificadores y constructores.

Existen editores para todos los tipos primitivos y sus contrapartes de tipo objeto. Al hacer la inyección se utiliza el editor registrado del tipo destino para hacer la conversión. También se pueden registrar editores personalizados.

Page 12: Mns spring framework - Core

SPRING FRAMEWORK12 CONTENEDOR CENTRAL

La interfaz ApplicationContext hereda todas las capacidades de la factoría de beans y automatiza sus funciones, como por ejemplo preinstanciar los singletons.

En las aplicaciones web, el contexto de la aplicación se configura en el archivo web.xml. Para los contenedores de servlets que soporten la especificación 2.3 sería de la siguiente manera:<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener

</listener-class></listener>

Al utilizar un contenedor con la especificación 2.2 sería de esta forma:<servlet>

<servlet-name>contextLoaderServlet</servlet-name><servlet-class>

org.springframework.web.context.ContextLoaderServlet</servlet-class><load-on-startup>1</load-on-startup>

</servlet>

Page 13: Mns spring framework - Core

SPRING FRAMEWORK13 CONTENEDOR CENTRAL

El objeto ApplicationContext se coloca dentro del objeto ServletContext de la aplicación web. Y se puede recuperar de la siguiente manera:ApplicationContext c =

WebApplicationContextUtils.getWebApplicationContext(servletContext);

Por defecto la configuración se carga de la ruta ‘/WEB-INF/applicationContext.xml’, pero este lugar puede sobrescribirse de esta forma:<context-param>

<param-name>contextConfigLocation</param-name><param-value>

classpath:service-context.xmlclasspath:data-access-context.xml

</param-value></context-param>

Se pueden llegar a especificar múltiples rutas separadas por coma, punto y coma, espacio, tabulación o salto de línea.

Page 14: Mns spring framework - Core

SPRING FRAMEWORK14 CONTENEDOR CENTRAL

La inyección de dependencias permite acoplar las capas de una aplicación sin escribir código para tal efecto, teniendo la configuración en un solo lugar y en una forma fácil de cambiar.

El contenedor de Spring es en realidad un modelo de despliegue. Una vez que todos los componentes estén configurados en archivos XML, la aplicación puede ser cargada como una aplicación stand-alone, una aplicación web o cualquier otro tipo de aplicación.