Sie sind auf Seite 1von 164

Curso de

Spring Framework

Quines somos?

Carlos Eduardo Ayala Leandro


Software Developer, +9 aos de
experiencia
Madrid - Espaa
ceal1818@gmail.com
Carlos Ayala
http://softwaredevlearnings.blogspot.com.es/

Spring Framework
Introduccin
En la actualidad hay muchos
frameworks y componentes de
software que facilitan el
desarrollo de aplicaciones
JSP
empresariales.
JavaMa
il

EJB

Spring Framework
Introduccin
Las aplicaciones empresariales
deben tener la capacidad de
conectarse con otras
aplicaciones o servicios.

Spring Framework
Introduccin
Las aplicaciones deben ser
altamente adaptables a los
cambios tecnolgicos.

Spring Framework
Qu es Spring
Framework?
Es una plataforma que
proporciona un soporte
integral de las diferentes
infraestructuras que permiten
el desarrollo de aplicaciones
Java.

Spring Framework
Qu es Spring
Framework?
Spring es una plataforma que
gestiona las diferentes
infraestructura que
necesitamos para dedicarnos
solo al desarrollo Java.

Spring Framework
Qu es Spring
Framework?
Spring nos permite construir
aplicaciones haciendo uso de
objetos planos Java (POJO).
Spring puede aplicarse para
desarrollar aplicaciones bajo el
modelo JSE o JEE.

Spring Framework
Historia de Spring
Framework
En el ao 2000 Rob Johnson
escribi los primeros
componentes de Spring,
mientras trabajaba como
consultor independiente para
sus clientes en la industria
financiera en Londres.

Spring Framework
Historia de Spring
Framework
Rod ampli consigui una forma
sintetizar la forma de utilizar los
diferentes componentes J2EE.
Para el 2001 las aplicaciones
empresariales basadas en Java
deban escribirse usando el API
Java Servlet o los EJBs.

Spring Framework
Historia de Spring
Framework
Las aplicaciones stand-alone
en el 2001 podan escribirse
con muchas APIs libres o
privativas que se adaptaran a
las necesidades del proyecto.

Spring Framework
Historia de Spring
Framework
Se form un pequeo equipo
de desarrolladores que
esperaba trabajar en extender
el framework y un proyecto
fue creado en Sourceforge en
febrero de 2003.

Spring Framework
Historia de Spring
Framework
Despus de trabajar en su
desarrollo durante ms de un
ao lanzaron una primera
versin (1.0) en marzo de
2004.

Spring Framework
Historia de Spring
Framework
Despus de este lanzamiento
Spring gan mucha popularidad
en la comunidad Java, debido
en parte al uso de Javadoc y de
una documentacin de
referencia por encima del
promedio de un proyecto de
cdigo abierto.

Spring Framework
Historia de Spring
Framework
Spring fue duramente criticado
en 2004 y sigue siendo el tema
de acalorados debates.
Al tiempo del primer gran
lanzamiento muchos
desarrolladores y lderes de
opinin vieron a Spring como un
cambio muy positivo.

Spring Framework
Historia de Spring
Framework
Spring Framework hizo que
aquellas tcnicas
desconocidas para la mayora
de programadores se volvieran
populares en poco tiempo (por
ejemplo, IoC).

Spring Framework
Historia de Spring
Framework
En el 2004, Spring disfrut de
unas altsimas tasas de
adopcin y al ofrecer su propio
framework deprogramacin
orientada a aspectos(AOP)
consigui hacer ms popular su
paradigma de programacin en
la comunidad Java.

Spring Framework
Historia de Spring
Framework
En 2005 este framework
super sus cifras de adapcin
que el anterior y su
popularidad continua
aumentando.

Spring Framework
Qu podemos lograr?
Podemos crear un mtodo
que ejecute una transaccin
contra la base de datos sin
hacer uso del API de
transacciones.

Spring Framework
Qu podemos lograr?
Podemos crear un mtodo
que realice una llamada a un
procedimiento remoto sin
hacer de API de llamadas de
procedimientos remotos.

Spring Framework
Qu podemos lograr?
Podemos crear un mtodo
que administre operaciones
sin hacer uso del API JMX.
Podemos crear un mtodo
que administre el envo y
recepcin de mensajes sin
hacer uso directo del API
JMS.

Spring Framework
IoC: Inversion of Control
Es un principio en el que el
control de ejecucin del
programa deja de ser de si
mismo y pasa a ser de la
librera que implanta el IoC.

Spring Framework
IoC: Inversion of Control
Las interfaces han
popularizado este mtodo de
programacin.
Las libreras de IoC poseen un
motor que gestiona todo el
control de este principio.

Spring Framework
IoC: Inversion of Control
Cmo utilizamos IoC?
Construimos nuestra aplicacin.
Configuramos cada componente
de nuestra aplicacin.
El motor Spring se encarga de
instanciar y ejecutar los
componentes de acuerdo a la
configuracin.

Spring Framework
DI: Dependecy Injection
Es un patrn de diseo
orientado a objetos, en el que
se suministran objetos a una
clase en lugar de ser la propia
clase quien cree el objeto.

Spring Framework
DI: Dependecy Injection
Cmo utilizamos el DI?
Construimos los componentes de
la aplicacin.
Configuramos cada dependencia
del componente.
El motor Spring instancia cada
componente proporcionandole su
respectiva dependencia.

Spring Framework
DI: Dependecy Injection
Ventajas
Reduce el cdigo pegamento,
es decir,minimiza la cantidad
de cdigo que usamos escribir
para unir distintos
componentes.
Facilita la evolucin de
dependencias sin recompilar el
cdigo del proyecto.

Spring Framework
DI: Dependecy Injection
Ventajas
Las dependencias son
controladas en un nico lugar:
el motor IoC.
Facilita la calidad de la
aplicacin al estar alta y
fcilmente integrada con
framework de pruebas
unitarias y mocks.

Spring Framework
Arquitectura de Spring

Spring Framework
Arquitectura de Spring
Contenedor de IoC: Permite
la configuracin de los
componentes de la aplicacin
y la administracin del ciclo de
vida de los objetos Java, se
lleva a cabo principalmente a
travs de la inyeccin de
dependencias.

Spring Framework
Arquitectura de Spring
Programacin orientada a
aspectos: habilita la
implementacin de rutinas
transversales.
Acceso a datos: se trabaja
con RDBMS usando JDBC o
motores ORM. Tambin se esta
proporcionando soporte ORM a
base de datos No SQL.

Spring Framework
Arquitectura de Spring
Gestin de transacciones:
unifica las distintas APIs de
gestin de transacciones y
coordina las transacciones de
los objetos Java.
MVC: es un framework basado
en HTTP y servlets, que provee
herramientas para el desarrollo
de aplicaciones web y servicios
REST.

Spring Framework
Arquitectura de Spring
Framework de acceso
remoto: Permite la
importacin y exportacin
estilo RPC, de objetos Java a
travs de redes que soporten
RMI, CORBA y protocolos
basados en HTTP incluyendo
servicios web (SOAP).

Spring Framework
Arquitectura de Spring
Convencin sobre
Configuracin: el mdulo
Spring Roo ofrece una solucin
rpida para el desarrollo de
aplicaciones basadas en
Spring Framework, dando
prioridad a la simplicidad sin
perder flexibilidad.

Spring Framework
Arquitectura de Spring
Procesamiento por lotes: es
un framework capaz de
procesar grandes volumenes
de datos. Con capacidades
para evaluar el rendimiento
del proceso en lote y la
administracin de recursos.

Spring Framework
Arquitectura de Spring
Autenticacin and
Autorizacin: procesos de
seguridad configurables que
soportan un rango de
estndares, protocolos,
herramientas y prcticas a
travs del subproyecto Spring
Security (antiguamente Acegi).

Spring Framework
Arquitectura de Spring
Administracin Remota:
Configuracin de visibilidad y
gestin de objetos Java para la
configuracin local o remota
va JMX.
Testing: Soporte de clases
para desarrollo de unidades de
prueba e integracin.

Spring Framework
Arquitectura de Spring
Mensajes: Registro
configurable de objetos
receptores de mensajes, para
el consumo transparente
desde la a travs de JMS, una
mejora del envo de mensajes
sobre las API JMS estndar.

Spring Framework
Spring Container
Es un componente
encargado de crear los
objetos, conectarlos entre si,
configurarlos y adems
controla el ciclo de vida de
cada objeto mediante el DI.

Spring Framework
Spring Container
El contenedor Spring se
puede configurar mediante
XML, anotaciones o
programticamente.
Para personalizar este
contenedor, debemos:
Crear los beans.
Configurar los servicios de usara
cada bean.

Spring Framework
Spring Container
Configuracin del contenedor.
Crear XML de configuracin del
contenedor.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Bean definitions go here -->
</beans>

Se instancia cada objeto de la


aplicacin, mediante la siguiente
configuracin.
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>

Spring Framework
Spring Container
Instanciacin del contenedor
Es necesario crear un objeto del
ApplicationContext que se adapte a
las caractersticas del proyecto.
Es necesario indicarle al contenedor
que ficheros de configuracin
deber levantar.
ApplicationContext context = new
ClassPathXmlApplicationContext(
new String[] {application.xml", daos.xml"}
);

Spring Framework
Spring Container
Uso del contenedor
El contenedor dispone de un
mtodo que nos permite obtener
los beans configurados.
T getBean(String name, Class<T> requiredType)

Cuando deseamos utilizar un bean


llamamos a este mtodo pasandole
los argumentos obligatorios.
PetStoreService service = context.getBean("petStore",
PetStoreService.class);
List<String> userList = service.getUsernameList();

Spring Framework
Spring Container
Inyeccin de dependencias
Este patrn nos permite
alcanzar un cdigo ms
desacoplado, para acometer
los test unitarios y cambiar
partes del sistema ms
fcilmente.

Spring Framework
Spring Container
Inyeccin de dependencias
Cada componentes debe
declarar sus dependencias,
pero no se encargara de
conseguirlas.
El contenedor Spring es el
encargado de resolver todas
las dependencias
configuradas dentro de cada
bean.

Spring Framework
Spring Container
Inyeccin de dependencias
Ejemplo sin DI.
public class GeneratorPlaylist {
private SongsFinder songsFinder;

public GeneratorPlaylist(){
this. songsFinder = new SongsFinder();
}

Spring Framework
Spring Container
Inyeccin de dependencias
Mediante constructor
El bean que no posee cdigo para
buscar dependecias (setters o getters).
El bean tiene un construtor con
argumentos donde puede pasarsele las
dependecias.
La configuracin puede realizarse
mediante XML o anotaciones.

Spring Framework
Spring Container
Inyeccin de dependencias
Mediante constructor
Cdigo Java
public class GeneratorPlaylist {

public GeneratorPlaylist(SongsFinder songsFinder){


this. songsFinder = songsFinder;
}

id=" songsFinder " class="com.test. SongsFinder/>


<bean
Configuracin
XML
<bean id="generadorPlaylist"
class="com.test. GeneratorPlaylist">
<constructor-arg type=" com.test. SongsFinder " ref="
songsFinder">
</constructor-arg>
</bean>

Spring Framework
Spring Container
Inyeccin de dependencias
Mediante setter
El bean que posee cdigo para buscar
dependecias (setters o getters).
El bean puede tener o no constructor
con argumentos.
La configuracin puede realizarse
mediante XML o anotaciones.

Spring Framework
Spring Container
Inyeccin de dependencias
Mediante constructor
Cdigo Java
public class GeneratorPlaylist {

public GeneratorPlaylist(){}
public SongsFinder getSongsFinder(){}
public void setSongsFinder(SongsFinder songsFinder){}

id=" songsFinder " class="com.test. SongsFinder/>


<bean
Configuracin
XML
<bean id="generadorPlaylist"
class="com.test. GeneratorPlaylist">
<property name="songsFinder" ref=" songsFinder/>
</bean>

Spring Framework
Application Context
Representa al contenedor
deIoCdeSpring, y es el
responsable de instanciar,
configurar, y ensamblar los
beans.
El contenedor obtiene la
informacin de qu objetos debe
crear leyendo los metadatos de
la configuracin en XML,
anotaciones o bajo Java.

Spring Framework
Application Context
El Application Context es una
interfaz que proporciona toda la
funcionalidad del contenedor
Spring.
Entre las implementaciones ms
utilizadas estn:
ClassPathXmlApplicationContext
FileSystemXmlApplicationConte
xt
WebApplicationContext

Spring Framework
Application Context
ClassPathXmlApplicationContext
Es un contenedor que obtiene los
ficheros de configuracin XML
dentro del contexto del classpath
del proyecto.
Este contenedor esta diseado para
aplicaciones standalone.
ApplicationContextcontext=newClassPathXmlApplicationContext("c
ontext.xml");

Spring Framework
Application Context
FileSystemXmlApplicationContex
t
Es un contenedor que obtiene los
ficheros de configuracin desde una
ruta del sistema de ficheros o desde
un URL.
ApplicationContextctx=newFileSystemXmlApplicationContext("build/
Este contenedor esta diseado para
application.xml");
aplicaciones standalone.

Spring Framework
Application Context
WebApplicationContext
Es un contenedor de solo lectura
que provee la configuracin Spring
desde una aplicacin web Java.
Este contenedor da soporte al
ServletContext.
Este contenedor esta diseado para
aplicaciones web Java.
WebApplicationContext ctx =
WebApplicationContextUtils.getWebApplicationContext(servletContext);

Spring Framework
Resources
Java da soporte un soporte
bsico a la obtencin y manejo
de recursos mediante
java.net.URL
El objeto URL no proporciona un
control a bajo nivel del recurso
que se intenta controlar con este
objeto.

Spring Framework
Resources
Spring proporciona una interfaz
que abstrae al desarrollador del
manejo a bajo nivel de un
recurso.
La interfaz Resource posee est
estructura:
public interface Resource extends InputStreamSource {
boolean exists();
boolean isOpen();
URL getURL() throws IOException;
File getFile() throws IOException;
Resource createRelative(String relativePath) throws IOException;
String getFilename();
String getDescription();
}

Spring Framework
Resources
getInputStream(): Localiza,
abre el recurso y retorna un
stream abierto del frecurso.
exists(): Indica si el recurso
existe fsicamente.
isOpen(): Indica si el resurso
esta abierto o disponible.
getDescription(): Retorna la
descripcin del recurso.

Spring Framework
Resources
Implementaciones de
Recursos
UrlResource: esta
implementacin de
java.net.URL da soporte a
recursos en HTTP, FTP, etc.
ClassPathResource: Esta
implementacin proporciona
recursos en el mbito del
classpath.

Spring Framework
Resources
Implementaciones de
Recursos
FileSystemResource: Esta
implementacin proporciona
recursos en el mbito del
sistema de ficheros.
ServletContextResource: es
una implementacin de permite
obtener recursos desde la ruta
principal de una aplicacin web.

Spring Framework
Resources
Implementaciones de
Recursos
InputStreamResource: es
una implementacin que
obtiene el recurso en el
formato InputStream.
ByteArrayResource: es una
implementacin que obtiene el
recuro en el formato
ByteArrayInputStream.

Spring Framework
Resource Loader
Es una interfaz que nos permite
cargar los recursos que
deseamos utilizar.
public interface ResourceLoader {
Resource getResource(String location);
}

Podemos llamar a recursos con


el contexto de aplicacin
indicndole la ubicacin.
Resource template = ctx.getResource("some/resource/path/myTemplate.txt");

Spring Framework
Resource Loader
Podemos obtener recursos
especificos mediante establecer
un prefijo al solicitar el mismo.
Resource template =
ctx.getResource(classpath:some/resource/path/myTemplate.txt");

Prefijo

Explicacin

classpath:

Carga un recurso desde el classpath.

file:

Carga un recurso como un URL desde el sistema de


archivos.

http:

Carga un recurso como un URL.

(ninguno)

Depende de el ApplicationContext

Spring Framework
Bean Factory
Es una implementacin del
patrn Factory que proporciona
Spring para la creacin de los
beans configurados en el
contexto.
Para construir un bean desde
este componente debemos
proporcionar el nombre del bean.

Spring Framework
Bean Factory
Los objetos que puede devolver el
Bean factory cumplen los
siguientes patrones:
Singleton: se crea y retorna la misma
instancia as se llame ms de una vez.
Prototype: se crea y retorna tantas
instancias como solicitudes se
realicen.

La implementacin ms usada es
XmlBeanFactory, que recibe el
fichero de configuracin XML.

Spring Framework
Bean Factory
El XmlBeanFactory se crea
pasandole un InputStream del
fichero de configuracin.
BeanFactory bf = new XmlBeanFactory(new FileInputStream(beans.xml));

Para obtener un bean se debe


llamar al mtodo get pasandole
el nombre del bean.
UserDao userDao = (UserDao) bf.get(userDao);

Spring Framework
XML Bean Configuration
La columna vertebral de todo
proyecto Spring es la
configuracin de sus beans.
Una de las formas de
configuracin disponibles en
Spring es XML.

Spring Framework
XML Bean Configuration
Atributo

Descripcin

class
(Requerido)

Nombre de clase completo del cual se desea


crear un objeto.

name

Identificador del objeto.

scope

Alcance con que ser creado el objeto.

constructorarg

Argumento del constructor

value

Valor de un atributo del objeto

ref

Referencia de objeto. Corresponde con el name


de un objeto.

lazy-init

Mtodo que indica cuando debe instanciarse el


objeto.

init-method

Mtodo que se invoca al crear un objeto.

destroymethod

Mtodo que se invoca al destruir un objeto.

Spring Framework
XML Bean Configuration
Ejemplo
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- A simple bean definition -->
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- A bean definition with lazy init set on -->
<bean id="..." class="..." lazy-init="true">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- A bean definition with initialization method -->
<bean id="..." class="..." init-method="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- A bean definition with destruction method -->
<bean id="..." class="..." destroy-method="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>

Spring Framework
Annotations
El documento de configuracin en
XML suele ser complicado de hacer
y tambin de mantener.
Requiere conocer en gran detalle
cuales son los XML Schemas de los
mdulos de Spring que deseamos
utilizar.
Si se modulariza la configuracin
es necesario controlar las
importaciones de los documentos
de configuracin.

Spring Framework
Annotations
La configuracin por anotaciones
suele aadir a las clases Java
metainformacin que aporta
funcionalidad que el contexto de
la aplicacin utiliza como
configuracin.

Spring Framework
Annotations
Para hacer uso de la
configuracin mediante
anotaciones es necesario aplicar
esta configuracin mediante
XML.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/springcontext.xsd">

<context:annotation-config/>

</beans>

Spring Framework
Annotations
@Required: esta anotacin es
usada para indicar que una
propiedad debe tener un valor
obligatorio.
Esta anotacin debe ser utilizada
en
mtodos setter.
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Required
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// ...
}

Spring Framework
Annotations
@Required: esta anotacin es
usada para indicar que una
propiedad debe tener un valor
obligatorio.
Esta anotacin debe ser utilizada
en
mtodos setter.
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Required
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// ...
}

Spring Framework
Annotations
@Autowired: esta anotacin
inyecta dependecias a travs de
atributos, setter o constructores.
Anotacin @Autowired dentro de
atributos.
import org.springframework.beans.factory.annotation.Autowired;
public class TextEditor {
@Autowired
private SpellChecker spellChecker;
public TextEditor() {}
public SpellChecker getSpellChecker( ){
return spellChecker;
}
public void spellCheck(){
spellChecker.checkSpelling();
}
}

Spring Framework
Annotations
Anotacin @Autowired dentro de
constructores.
import org.springframework.beans.factory.annotation.Autowired;
public class TextEditor {
private SpellChecker spellChecker;
@Autowired
public TextEditor(SpellChecker spellChecker){
System.out.println("Inside TextEditor constructor." );
this.spellChecker = spellChecker;
}
public void spellCheck(){
spellChecker.checkSpelling();
}
}

Spring Framework
Annotations
Anotacin @Autowired dentro de
setters.
import org.springframework.beans.factory.annotation.Autowired;
public class TextEditor {
private SpellChecker spellChecker;
@Autowired
public void setSpellChecker( SpellChecker spellChecker ){
this.spellChecker = spellChecker;
}
public SpellChecker getSpellChecker( ) {
return spellChecker;
}
public void spellCheck() {
spellChecker.checkSpelling();
}
}

Spring Framework
Annotations
@Qualifier: esta anotacin
inyecta dependecias con
identificadores especificos donde
se indique
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class Profile {
@Autowired
@Qualifier("student1")
private Student student;
public Profile(){
System.out.println("Inside Profile constructor." );
}
public void printAge() {
System.out.println("Age : " + student.getAge() );
}
public void printName() {
System.out.println("Name : " + student.getName() );
}
}

Spring Framework
SPEL-based configuration
Es un lenguaje de expresiones
que permite la consulta y
manipulacin de objetos en
tiempo real.
Este lenguaje provee soporte a
las siguientes funcionalidades:

Expresiones literales.
Expresiones regulares.
Invocacin de mtodos.
Etc

Spring Framework
SPEL-based configuration
Expresiones literales
#{Hola SPEL}
#{125.25}

Expresiones booleanas
#{12 > 7}

Acceso a funciones
#{Hola SPEL.toLowerCase()}

Acceso a atributos de bean


#{usuario.nombre}

Spring Framework
SPEL-based configuration
Expresiones para gestin de
#{empresa.empleados[2]}
colecciones
#{T(java.lang.Math)} de clases
Expresiones
#{T(java.lang.Math).random()}

Expresiones
#{usuario.edad > 18 ? true:
false}
condicionales
#{new Date()} instancia
Creando

Spring Framework
Ciclo de vida del bean
Es la secuencia de operaciones a
las que se ven sometidos los
beans desde el punto de vista de
su creacin y posterior
destruccin.
Spring proporciona mecanismos
adecuados para que las
aplicaciones puedan monitorizar
y reaccionar a estos eventos a
travs de mtodos callback.

Spring Framework
Ciclo de vida del bean
Inicializacin
Un bean puede ser notificado de su
inicializacin por parte de Spring
implementando la interface
InitializingBean.
Esta interface tiene un mtodo
pblicoafterPropertiesSetque se
invoca cuando todas las
propiedades del bean se han
inicializado.

Spring Framework
Ciclo de vida del bean
Inicializacin
El control de la inicializacin por
medio de esta interfaz, hace que el
bean sea dependiente de Spring.
import org.springframework.beans.factory.InitializingBean;
public class Pizzeria implements PizzeriaService, InitializingBean {
public void afterPropertiesSet() {
}
...
}

Spring Framework
Ciclo de vida del bean
Inicializacin
Para evitar dicha dependencia se
puede utilizar el atributoinitmethoddentro de la declaracin
del bean en el fichero XML.
<bean id="pizzeria" class="..." init-method="init">

import org.springframework.beans.factory.InitializingBean;
public class Pizzeria implements PizzeriaService {
public void init() {
}
...
}

Spring Framework
Ciclo de vida del bean
Destruccin
Existe una
interfaceDisposableBeanque
proporciona un mtodo
llamadodestroy, invocado por
Spring cuando se destruye la
instancia de un bean.
Tambin se proporciona un mtodo
de
destruccin
mediante
<bean
id="pizzeria" class="..."
destroy-method=exit">
configuracin.

Spring Framework
Ciclo de vida del bean
Mtodos por defecto
Incluso se da soporte a la
inicializacin y destruccin
generalizada de objetos mediante
configuracin desde el tag beans.
<beans default-init-method="init"
default-destroy-method="exit">
...
</beans>

Spring Framework
Ciclo de vida del bean
Anotaciones
Mediante la configuracin bajo
anotaciones se dispone de
@PostContruct y @PreDestroy
que cumplen con las funciones de
los mtodos antes descritos
.
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public abstract class Pizzeria implements PizzeriaService {
@PostConstruct
public void init() {
}
@PreDestroy
public void exit() {
}
}

Spring Framework
Aspect Oriented
Programming (AOP)
Es un paradigma de
programacin relativamente
reciente cuya intencin es
permitir una adecuada
modularizacin de las
aplicaciones y posibilitar la
separacin de conceptos.

Spring Framework
Aspect Oriented
Programming (AOP)
Qu funcionalidades
pueden convertirse en
aspectos?
Las funcionalidades comunes
pueden ser aspectos.
Las funcionalidades propias de
un mdulo puede ser
aspectos.

Spring Framework
Aspect Oriented
Programming (AOP)
Concepto
Trminos
comunes
Descripcin
Aspect

Es la funcionalidad que se cruza a lo


largo de la aplicacin que se va a
implementar de forma modular y
separada del resto de sistema.

Jointpoint

Es un punto de ejecucin dentro del


sistema donde el aspecto es
conectado.

Advice

Es la implementacin del aspecto.

Pointcut

Define los consejos que se aplicaran


a cada punto de cruce.

Spring Framework
Aspect Oriented
Programming (AOP)
Concepto
Tipos deDescripcin
aspectos
Before

El aspecto se ejecuta antes de ejecutarse el


mtodo que lo provoca.

After

El aspecto se ejecuta despus de ejecutarse el


mtodo que lo provoca, independiente del
xito o fracaso del mtodo.

After-running

El aspecto se ejecuta despus de que el


mtodo que lo provoca retorne un resultado.

After-throwing

El aspecto se ejecuta despus de devolver


una excepcin el mtodo que lo provoca.

Around

Este aspecto puede realizar accionesantes y


despus de invocar el mtodo interceptado.

Spring Framework
Aspect Oriented
Programming (AOP)
Configuracin basado en XML
El XML de configuracin Spring
debe tener un nuevo esquema y
namespace que da el soporte al
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=http://www.springframework.org/schema/beans
AOP.

xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:aop=http://www.springframework.org/schema/aop
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">
<!-- bean definition & AOP specific configuration -->
</beans>

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de aspecto
Para configurar todo lo referente a
aspectos debemos usar los tags con
el namespace aop.
La configuracin de un aspecto se
<aop:config>
realiza con le tag <aop:config>
<aop:aspect id="myAspect" ref="aBean">
...
</aop:aspect>
</aop:config>
<bean id="aBean" class="...">
...
</bean>

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de aspecto
En el tag <aop:aspect>
identificamos el aspecto e
indicamos la instancia del bean que
<aop:config>
<aop:aspect id="myAspect"
ref="aBean">
implementa
el aspecto.
...
</aop:aspect>
</aop:config>
<bean id="aBean" class="...">
...
</bean>

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de aspecto
En el tag <aop:aspect>
identificamos el aspecto e
indicamos la instancia del bean que
<aop:config>
<aop:aspect id="myAspect"
ref="aBean">
implementa
el aspecto.
...
</aop:aspect>
</aop:config>
<bean id="aBean" class="...">
...
</bean>

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de punto de
cruce
El tag <aop:pointcut> podemos
configurar el punto de cruce.
En este tag identificamos el punto
<aop:config>
<aop:aspect id="myAspect" ref="aBean">
<aop:pointcut
id="businessService"
expression="execution(*
de
corte e
indicamos
la expresin
com.xyz.myapp.service.*.*(..))"/>
...
de
conexin.
</aop:aspect>
</aop:config>
<bean id="aBean" class="...">
...
</bean>

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de punto de cruce
En la expresin de conexin podemos
indicar los siguientes puntos:
Modificador de acceso.
Clase de componente que debe ser
interceptado.
Mtodo que debe ser interceptado.

En la configuracin de expresiones se
puede usar el comodn * como
indicador de todo.

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de punto de
execution(public * *(..))
cruce
Ejecucin de un mtodo pblico.
execution(* set*(..))
Ejecucin
de cualquier mtodo que
empiece por set*

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de punto de
cruce
execution(* com.xyz.service..(..))

Ejecucin de cualquier mtodo de la


clase AccountService.
execution(* com.xyz.service...(..))
Ejecucin
de cualquier mtodo de
las clases dentro del paquete
service.

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de advice
Before
pointcut-ref: referencia del punto de
corte.
<aop:aspect
id="beforeExample"
method:
mtodo delref="aBean">
bean que escucha
<aop:before
el aspecto.
pointcut-ref="dataAccessOperation"
method="doAccessCheck"/>
...
</aop:aspect>
public void doAccessCheck() {

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de advice
After
pointcut-ref: referencia del punto de
corte.
<aop:aspect
id="beforeExample"
method:
mtodo delref="aBean">
bean que escucha
<aop:after
el aspecto.
pointcut-ref="dataAccessOperation"
method="doAccessCheck"/>
...
</aop:aspect>
public void doAccessCheck() {

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de advice
After-returning
pointcut-ref: referencia del punto de
corte.
returning: objeto que retorna el
mtodo interceptado.
<aop:aspect id="beforeExample" ref="aBean">
method: mtodo del bean que escucha
<aop:after-returning
pointcut-ref="dataAccessOperation
returning=retVal
el aspecto.
method="doAccessCheck"/>
...
</aop:aspect>

public void doAccessCheck(Object retVal) {

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de advice
After-throwing
pointcut-ref: referencia del punto de
corte.
throwing: excepcin que lanza el
mtodo interceptado.
<aop:aspect id="beforeExample" ref="aBean">
method: mtodo del bean que escucha
<aop:after-throwing
pointcut-ref="dataAccessOperation
throwing=retException
el aspecto.
method="doAccessCheck"/>
...
</aop:aspect>

public void doAccessCheck(Exception retException) {

Spring Framework
Aspect Oriented
Programming (AOP)
Declaracin de advice
Around
pointcut-ref: referencia del punto de
corte.
<aop:aspect
id="aroundExample"
method:
mtodo delref="aBean">
bean que escucha
<aop:around
el aspecto.
pointcut-ref="businessService"
method="doBasicProfiling"/>
...
</aop:aspect>
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable
{
// start stopwatch
Object retVal = pjp.proceed();
// stop stopwatch
return retVal;
}

Spring Framework
Aspect Oriented
Programming (AOP)
Configuracin mediante
Anotaciones
<aop:aspectj-autoproxy/>

Utilizamos la configuracin XML


package org.xyz;
org.aspectj.lang.annotation.Aspect;
import
Declaramos
el aspecto.
@Aspect
public class Logging {
}

Spring Framework
Aspect Oriented
Programming (AOP)
Configuracin mediante
Anotaciones
package org.xyz;
org.aspectj.lang.annotation.Aspect;
import
Declaramos
el punto de cruce.
@Aspect
public class Logging {
@Pointcut("execution(* com.tutorialspoint.*.*(..))")
private void selectAll(){}
}

Spring Framework
Aspect Oriented
Programming (AOP)
Configuracin mediante
Anotaciones
package org.xyz;
org.aspectj.lang.annotation.Aspect;
import
Declaramos
el punto de cruce.
@Aspect
public class Logging {
@Pointcut("execution(* com.tutorialspoint.*.*(..))")
private void selectAll(){}
@Before("selectAll()")
public void beforeAdvice(){
System.out.println("Going to setup student profile.");
}
@After("selectAll()")
public void afterAdvice(){
System.out.println("Student profile has been setup.");
}
}

Spring Framework
Aspect Oriented
Programming (AOP)
Configuracin mediante
Anotaciones
package org.xyz;
org.aspectj.lang.annotation.Aspect;
import
Declaramos
advices.
@Aspect
public class Logging {
@Pointcut("execution(* com.tutorialspoint.*.*(..))")
private void selectAll(){}
@Before("selectAll()")
public void beforeAdvice(){
System.out.println("Going to setup student profile.");
}
@After("selectAll()")
public void afterAdvice(){
System.out.println("Student profile has been setup.");
}
}

Spring Framework
Aspect Oriented
Programming (AOP)
Configuracin mediante
Anotaciones
package org.xyz;
org.aspectj.lang.annotation.Aspect;
import
Declaramos
advices.
@Aspect
public class Logging {
@Pointcut("execution(* com.tutorialspoint.*.*(..))")
private void selectAll(){}
@AfterReturning(pointcut = "selectAll()", returning="retVal")
public void afterReturningAdvice(Object retVal){
System.out.println("Returning:" + retVal.toString() );
}
@AfterThrowing(pointcut = "selectAll()", throwing = "ex")
public void AfterThrowingAdvice(IllegalArgumentException ex){
System.out.println("There has been an exception: " +
ex.toString());
}
}

Spring Framework
Data
Data Access Pattern
Es un patrn que aisla la lgica
de bajo nivel del acceso a
datos de la lgica de alto nivel
del negocio.
Este patrn se basa en el uso
de una interfaz que
proporciona los prototipos del
CRUD.

Spring Framework
Data
Data Access Pattern

Spring Framework
Data
Transacciones
Una transaccin es un
conjunto de instrucciones que
se ejecutan en bloque.
Las instrucciones de una
transaccin se ejecutan todas o
ninguna.
Cuando una transaccin termina
se hace commit sobre ella, si
falla se hace rollback.

Spring Framework
Data
ACID: Principios de
transacciones
Atmico: Todas las
operaciones en una transaccin
ocurrir si la todas terminan su
ejecucin correctamente o
ninguna de ellas ocurrir si una
de estas falla, en cuyo caso se
deshacen todos los cambios
efectuados.

Spring Framework
Data
ACID: Principios de
transacciones
Consistente: Cuando termina
la transaccin correcta o
incorrectamente, el sistema es
dejado en un estado
consistente con el negocio que
modela.

Spring Framework
Data
ACID: Principios de
transacciones
Aislado:Las transacciones debe
permitir a varios usuarios trabajar
con los mismos datos, sin que cada
trabajo de un usuarios se enrede
con el de los dems. Por lo tanto,
las transacciones deben ser aisladas
unas de las otras,previendode esta
manera la lectura y/o escritura
concurrente de los datos.

Spring Framework
Data
ACID: Principios de
transacciones
Durable: Una vez que una
transaccin concluye, el
resultado de una transaccin
debe persistir y debe
sobrevivir a cualquier tipo de
fallo del sistema.

Spring Framework
Data
Transacciones en Spring
Spring provee soporte para
administracin de
transacciones declarativas
yprogramables.
Spring puede utilizar el
soporte transaccional ofrecido
por el mecanismo de
persistencia, como JDBC,
Hibernate o JPA.

Spring Framework
Data
Transacciones en Spring
Si la aplicacin utiliza varios
recursos, Spring soporta
transacciones distribuidas, XA,
utilizando alguna
implementacin JTA de
terceros.

Spring Framework
Data
Transacciones
programticas
La forma ms adecuada de
implantar una transaccin
programtica es mediante
anotaciones.
La anotacin @Transactional
debe ser ubicada en la
@Transactional
public void execTransaction(){
cabecera
de un mtodo

}
pblico.

Spring Framework
Data
mbito de una transaccin
Si tenemos un mtodo
con@Transactional, la
transaccin empezar en la primera
lnea del mtodo y terminar justo
despus de la ltima.
Si dentro de esto mtodo existen
llamadas a otros mtodos estos
otros mtodos son llamados dentro
de la transaccin sin necesidad de
anotarlos con@Transactional.

Spring Framework
Data
Propagacin de una
transaccin
Es la estrategia de
administracin de la
transaccin.
Por medio de esta estrategia
se define si la creacin de la
transaccin es automtica o se
@Transactional( propagation = Propagation.REQUIRES_NEW )
public void execTransaction() {
utilizar alguna previamente

}
creada.

Spring Framework
Data
Tipos de propagacin
PROPAGATION_REQUIRED- Es la
que viene por defecto, as que no es
necesaria especificarla. Si existe
transaccin la aprovecha y sino la
crea.
REQUIRES_NEW- Abre una
transaccin nueva y pone en
suspenso la anterior. Una vez el
mtodo marcado como
REQUIRES_NEW termina se vuelve a
la transaccin anterior.

Spring Framework
Data
Tipos de propagacin
PROPAGATION_SUPPORTS- Si
existe transaccin la aprovecha,
sino no crea ninguna.
PROPAGATION_MANDATORY- Si
no existe una transaccin abierta se
lanza una excepcin. Hay gente que
anota sus DAO con esta opcin.

Spring Framework
Data
Tipos de propagacin
PROPAGATION_NEVER- Si existe
una transaccin abierta se lanza
una excepcin. No se me ocurre
ningn ejemplo donde esto sea
necesario pero seguro que alguno
hay.
PROPAGATION_NOT_SUPPORTED
- Si existe una transaccin la pone
en suspenso, la transaccin se
reactiva al salir del mtodo.

Spring Framework
Data
Commit y Rollback
Un mtodo @Transactional
cuando termina todas sus
instrucciones, culmina
haciendo un commit.
Cuando un mtodo
@Transactional falla lanzando
una excepcin que hereda de
RuntimeException, se realiza
un rollback.

Spring Framework
Data
Commit y Rollback
Hay momentos que no
queremos que se haga
unrollbackpara alguna
excepcin en concreto o lo
contrario, no queremos que
haga uncommitcuando se
lanza una excepcin que no
herede deRuntimeException

Spring Framework
Data
Commit y Rollback
Para esto tenemos las
propiedadesnoRollbackFory
rollbackFor, con estas
opciones podemos configurar
elcommity elrollbacksegn
nuestras necesidades.

Spring Framework
Data
Commit y Rollback
noRollbackFor
@Transactional(noRollbackFor={NumberFormatException.class,ArithmeticException.
class})
public void hazAlgoTransaccionalmente() {
// Soy transaccional!
}

rollbackFor
@Transactional(rollbackFor={FileNotFoundException.class})
public void hazAlgoTransaccionalmente() {
// Soy transaccional!
}

Spring Framework
Data
Transacciones declarativas
Las transacciones declarativas se
deben configurar asociadas a una
conexin a la fuente de datos.
<bean name="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<constructor-arg ref="sessionFactory"/>
</bean>
<bean name="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="dataSource" ref="dataSource" />
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean name="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
<constructor-arg ref="transactionManager"/>
</bean>

Spring Framework
Data
Transacciones declarativas
Las transacciones declarativas se
deben configuran en base a
aspectos.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">

<aop:config>
<aop:advisor pointcut="execution(public * demo.dao.*.create(..))" advice-ref="txadvice" />
</aop:config>

<tx:advice id="tx-advice">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" rollbackfor="Throwable" no-rollback-for="BusinessException" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>

</beans>

Spring Framework
Data
Transacciones declarativas
Las transacciones declarativas se
deben configuran en base a
aspectos.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">

<aop:config>
<aop:advisor pointcut="execution(public * demo.dao.*.create(..))" advice-ref="txadvice" />
</aop:config>

<tx:advice id="tx-advice">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" rollbackfor="Throwable" no-rollback-for="BusinessException" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>

</beans>

Spring Framework
Data
JDBC Template
Spring proporciona un
conjunto de funcionalidades
que facilitan el trabajo con
JDBC.
Por medio de estas
funcionalidades podemos
trabajar con la lgica de bajo
nivel de base de datos de
forma ms sencilla.

Spring Framework
Data
Configurando Data Source
Por medio de la clase
DriverManagerDataSource
podemos instanciar un
datasource estandar capaz de
conectarse a cualquier base de
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManage
datos.
rDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/TEST"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>

Spring Framework
Data
Configurando Data Source
Por medio de la clase
DriverManagerDataSource
podemos instanciar un
datasource estandar capaz de
conectarse a cualquier base de
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManage
datos.
rDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/TEST"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>

Spring Framework
Data
Ejecutando sentencias
Sentencia que retorna un entero
largo.
String SQL = "select count(*) from Student";
long rowCount = jdbcTemplateObject.queryForLong( SQL );

String
Sentencia
que retorna
SQL = "select count(*)
from Student";un entero.
int rowCount = jdbcTemplateObject.queryForInt( SQL );

Spring Framework
Data
Ejecutando sentencias
Sentencia dinmica con
parmetro.
String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});

Sentencia dinmica con


String SQL = "select name from Student where id = ?";
parmetros
de entradanewyObject[]{10},
salida.
String
name = jdbcTemplateObject.queryForObject(SQL,
String.class);

Spring Framework
Data
Ejecutando sentencias
Sentencia que devuelve un
registro asociado a un bean.
String SQL = "select * from Student where id = ?";
Student student = jdbcTemplateObject.queryForObject(SQL,
new Object[]{10}, new StudentMapper());
public class StudentMapper implements RowMapper<Student> {
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student = new Student();
student.setID(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
}
}

Spring Framework
Data
Ejecutando sentencias
Sentencia que devuelve un
conjunto de registros asociado a
String
= "select *de
from Student";
unaSQLlista
beans.
List<Student> students = jdbcTemplateObject.query(SQL,
new StudentMapper());
public class StudentMapper implements RowMapper<Student> {
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student = new Student();
student.setID(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
}
}

Spring Framework
Data
Ejecutando sentencias
Insertar registro
String SQL = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );

Actualizar registro
String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );

Eliminar registro
String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );

Spring Framework
Data
Ejecutando sentencias
Ejecutar DDL
String SQL = "CREATE TABLE Student( " +
"ID INT NOT NULL AUTO_INCREMENT, " +
"NAME VARCHAR(20) NOT NULL, " +
"AGE INT NOT NULL, " +
"PRIMARY KEY (ID));"
jdbcTemplateObject.execute( SQL );

Spring Framework
Vistas
Qu es MVC?

Spring Framework
Vistas
MVC Qu es esto?
Es un patrn de diseo
orientado a aplicaciones con
interfaz de usuario.
Su nombre nace de las
iniciales de las palabras
Modelo Vista Controlador.
Este patrn esta orientado
para aplicaciones web.

Spring Framework
Vistas
MVC Qu es esto?
Este patrn busca separar las
responsabilidades de cada
capa: lgica de negocio, lgica
de presentacin de los datos y
la integracin de estas capas.

Spring Framework
Vistas
MVC: Conceptos bsicos
Modelo: Es la capa que atiende a
toda la lgica del negocio y los
datos del mismo.
Vista: Es la capa que controla y
gestiona todo lo relativo a la
presentacin de los datos al
usuario.
Controlador: Es la capa que se
encarga de gestionar la interaccin
entre la vista y el modelo.

Spring Framework
Spring MVC
Es el mdulo de Spring que da
soporte a un framework
completo MVC.
Su componente principal es el
DispathServlet que se encarga
de gestionar todas las
peticiones y respuestas HTTP.

Spring Framework
Spring MVC
El WebApplicationContext es la
implementacin del
ApplicationContext que se usa
para Spring MVC.

Spring Framework
Spring MVC
Processing HTTP Request

Spring Framework
Spring MVC
Processing HTTP Request
Despus recibir la peticin, el
DispatcherServlet consulta
HandlerMapping para ver que
controler puede atender la
peticin.
El controler busca que mtodo
puede atender a la peticin
HTTP. Retorna el nombre de la
vista.

Spring Framework
Spring MVC
Processing HTTP Request
El DispatcherServlet usa al
ViewResolver para encontrar la
vista asociado a el nombre
previamente obtenido.
Finalmente, el DispatchServlet
pasa los datos obtenidos del
modelo para que se rendericen
junto a la vista.

Spring Framework
Spring MVC
Configuracin obligatoria
La configuracin de una
aplicacin web esta en el
web.xml
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Spring MVC Application</display-name>


<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
</web-app>

Spring Framework
Spring MVC
Configuracin obligatoria
Se declara el DispatcherServlet
para que se ejecute al levantar
el servidor.
Este componente va a levantar
el WebApplicationContext con
el fichero de configuracin que
le indiquemos.
El fichero de configuracin debe
estar ubicado en WEB-INF/

Spring Framework
Spring MVC
Configuracin obligatoria
Podemos cambiar la ubicacin
del fichero de configuracin, si
agregamos el
ContextLoaderListener.
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application-config.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

</web-app>

Spring Framework
Spring MVC
Configuracin Spring
El fichero de configuracin
Spring nos sirve para enlazar
todos los componentes y las
pginas.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:component-scan base-package=com.example.*" />


<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolv
er">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>

Spring Framework
Spring MVC
Configuracin Spring
Se define el escaner de
componentes que instanciar
a todos las clases configuradas
con anotaciones.
Se configura el ViewResolver
donde indicamos el directorio
donde se encuentran las
pginas dinamicas y que
extensin tienen.

Spring Framework
Spring MVC
Implementando el
controlador
Las anotaciones ms
importantes en el controlador
son: @Controller y
@Controller
@RequestMapping("/hello")
@RequestMapping.
public class HelloController{
@RequestMapping(method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}

Spring Framework
Spring MVC
Implementando el
controlador
@Controller define el
componente como el
controlador dentro del MVC.
@RequestMapping puede
enlazar al controlador con un
recurso y cada mtodo con un
mtodo HTTP.

Spring Framework
Spring MVC
Implementando el
controlador
Pero @RequestMapping tambin
pueden hacer que cada mtodo
se asocie individualmente a
cada recurso y mtodo HTTP.
La enumeracin RequestMethod
proporciona configuracin para
todos los mtodos HTTP (GET,
POST, PUT, DELETE, )

Spring Framework
Spring MVC
Implementando el
controlador
La clase ModelMap es el medio
que disponemos con Spring
MVC de enviar los datos a la
vista.
Nosotros debemos retornar el
nombre de la vista que
deseamos presentar.

Spring Framework
Spring MVC
Implementando el
controlador
Con la anotacin
@RequestParam podemos
asociar un parmetro de la
@Controller
@RequestMapping("/invoice")
URL con un parmetro del
public class InvoiceController{
mtodo.
@RequestMapping(method = RequestMethod.GET)
public String printHello(@RequestParam(id) int id, ModelMap
model) {
model.addAttribute(invoice", obj);
return detail-invoice";
}
}

Spring Framework
Spring MVC
Creando la vista
Las vistas pueden por defecto
son JSP, pero Spring MVC
puede integrarse con JSF,
Struts y otros frameworks que
dan soporte de vistas.
<html>
<head>
<title>Hello Spring MVC</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>

Spring Framework
Spring MVC
Creando la vista
Todos los atributos que
agregamos en la instancia de
ModelMap, podemos acceder a
ella con el lenguaje de
expresiones soportado.
<html>
<head>
<title>Hello Spring MVC</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>

Spring Framework
Spring MVC
REST

Muchas gracias

Das könnte Ihnen auch gefallen