PDF de programación - Introducción a Spring

Imágen de pdf Introducción a Spring

Introducción a Springgráfica de visualizaciones

Publicado el 24 de Mayo del 2018
306 visualizaciones desde el 24 de Mayo del 2018
181,0 KB
27 paginas
Creado hace 12a (16/12/2008)
Introducción a Spring

Norberto Fernández

Departamento de Ingeniería Telemática

Universidad Carlos III de Madrid

berto@it.uc3m.es

Servidores de Información 2008/2009

1

¿Qué es Spring?

• Framework de código abierto para el desarrollo de

aplicaciones (empresariales) Java

• Origen: Rod Johnson, Expert One-to-One J2EE Design and

Development (Octubre, 2002)

• Alternativa popular a J2EE (EJBs)
• Veremos la versión 2.5

Servidores de Información 2008/2009
Fuente: Dzone

2

1

Motivación

• Malas experiencias con aplicaciones J2EE

o Complejas,difíciles de probar, pobres prestaciones,...

• Críticas al uso de EJBs:

o Rod Johnson, J2EE development without EJB (2004)

 Complejidad (descriptores, implementación interfaces,...) y

baja productividad del programador
 Modelo remoto basado sólo en RMI
 Muchas aplicaciones no necesitan componentes remotos
 Difíciles de depurar (dependencias con contenedor, volver a

hacer deployment y volver a arrancar)

 Mapeo O/R basado en entity beans limitado (p.ej. no

considera la relación de herencia)

 ...

Servidores de Información 2008/2009

3

Motivación

• J2EE objetivo: estandarizar servicios de uso común en el

desarrollo de aplicaciones empresariales
o Directorio (JNDI), transacciones (JTA), conexión a sistemas legados

(JCA), pooling de recursos, etc

• EJB es sólo una forma de llevar a la práctica a esos

servicios a través de un modelo de componentes

• Sin embargo podemos usar las funcionalidades de los

servicios sin tener EJBs ...

• ... este es el objetivo de Spring: ofrecer librerías con las

funcionalidades de uso común por aplicaciones
empresariales ...

• ... y más "ligeras" que los EJBs

o Usar POJOs (Plain Old Java Objects) en su lugar

Servidores de Información 2008/2009

4

2

Módulos principales de Spring

• Spring Core (Inversión del control (IoC) / Inyección de

dependencias (DI))

• Spring AOP (Programación orientada a aspectos)
• Spring JDBC (Acceso a datos)
• Spring MVC (desarrollo Web según el patrón MVC)
• Spring Remoting (distribución)
• Spring Transaction Abstraction (Gestión de

transacciones)

• Otros: Spring TestContext (pruebas), Spring JMX

(gestión), Spring Security (seguridad), Spring Web Flow
(control de flujos en aplicaciones Web)

Servidores de Información 2008/2009

5

Spring Core

Dependency Injection

3

IoC / DI: Introducción

• El núcleo de Spring (Spring Core)
• Inversion of Control (IoC): Hollywood principle

o "Don't call us, we'll call you"

• Los componentes no crean (con new) o buscan (p.ej. con
JNDI) las referencias a otros componentes que necesitan
para realizar su trabajo, sino que simplemente declaran
qué dependencias tienen (fichero de configuración,
anotaciones) y un contenedor les proporciona (inyecta)
estas dependencias
o Dependency Injection (DI)

• El contenedor se encarga de instanciar o localizar los

componentes necesarios e inicializarlos antes de inyectar su
referencia a quién la necesite

Servidores de Información 2008/2009

7

IoC / DI: Introducción

• Se suele combinar con programación basada en interfaces,

para conseguir bajo acoplamiento entre componentes
o Sólo dependencia con las interfaces, no con las implementaciones

concretas
• Ventajas:

o Se reduce el código de pegamento

 Llamadas a JNDI para localizar componentes
 Código de conexión con componentes remotos

 El contenedor proporciona proxy

o Fichero de configuración de dependencias: tocar sólo ahí

para cambiarlas
 Sin tocar el código fuente y sin recompilar

o Facilidad para llevar a cabo pruebas

 Reemplazar componentes por Mockup objects

Servidores de Información 2008/2009

8

4

DI: HolaMundo (I)

Interfaz del servicio:

package spring.core.ejemplos;

public interface MessagingService {

public String sayMessage(String name);

}

Servidores de Información 2008/2009

9

DI: HolaMundo (II)

Implementación del servicio:

package spring.core.ejemplos;



public class MessagingServiceImpl implements MessagingService {

Message msg = null;
public void setMsg(Message msg) {

this.msg = msg;

}
public String sayMessage(String name) {

return msg.getMsg() + " " + name;

}

}

Servidores de Información 2008/2009

10

5

DI: HolaMundo (III)

Message (interfaz e implementación):

package spring.core.ejemplos;

public interface Message {

public String getMsg();

}

package spring.core.ejemplos;

public class HelloMessage implements Message {

public String getMsg() {

return "Hello";

}

}

Servidores de Información 2008/2009

11

DI: HolaMundo (IV)

Fichero de configuración XML de Spring (spring-beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="helloMsg" class="spring.core.ejemplos.HelloMessage"/>

<bean id="helloSrv" class="spring.core.ejemplos.MessagingServiceImpl">

<property name="msg" ref="helloMsg"/>

</bean>

</beans>

Servidores de Información 2008/2009

12

6

DI: HolaMundo (y V)

Main de la aplicación:



package spring.core.ejemplos;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class Main {

public static void main(String[] args) {

ApplicationContext context = new

FileSystemXmlApplicationContext("src/spring/core/ejemplos/spring-beans.xml");

MessagingService hello = (MessagingService)context.getBean("helloSrv");
System.out.println(hello.sayMessage(args[0]));



}

}

Servidores de Información 2008/2009

13

Spring AOP

Programación Orientada a Aspectos

7

AOP: Introducción

• ¿Qué es?

o Aspect Oriented Programming
o Permite combinar cierto código con otro (aspecto) para añadir cierta

funcionalidad al original sin necesidad de modificarlo

o Facilitar la implementación de funcionalidades transversales de una

aplicación

 Ej.: logging, control acceso

• Tipos de AOP

o Estática

 En tiempo de compilación

 Se incluye la información de aspectos en los bytecodes

 Problema: recompilar para modificar

o Dinámica

 En tiempo de ejecución
 Problema: mayor coste computacional

 Interrumpir flujo programa para comprobar si hay que ejecutar el aspecto

Servidores de Información 2008/2009

15

AOP: Conceptos

• Joinpoint (Punto de cruce)

o Punto concreto del flujo de ejecución

 Ej.: Llamada al método hola de una determinada clase

• Advice (Consejo)

o Código que el aspecto ejecuta en un joinpoint

• Pointcuts (Punto de corte)

o Combinación de joinpoints

• Aspects (Aspecto)

 Ej.: Llamada a cualquier método de una clase concreta

o Combinación de advice (código) y pointcut (lugar donde se interrumpe el

flujo normal para ejecutarlo)

• Target (Destinatario)

o Objeto cuyo comportamiento modifica el aspecto

• Introduction

o Permite añadir métodos o atributos a clases ya existentes

Servidores de Información 2008/2009

16

8

Spring AOP

• AOP dinámica
• Implementada a través de Proxys
• Más limitada que la de otras librerías (ej.: AspectJ)

o Ej.: Sólo un tipo de joinpoint (invocación a método)

 Se puede combinar AspectJ con Spring si se necesita más

• El propio framework utiliza aspectos para implementar otras

funcionalidades
o Ej.: Transacciones

• A continuación veremos el HolaMundo

Servidores de Información 2008/2009

17

Spring AOP: Hola Mundo (I)

Target:



package spring.aop.ejemplos;

public class HelloWorldServiceImpl implements HelloWorldService {

public String sayHello(String name) {

return "Hello " + name;

}

}

Servidores de Información 2008/2009

18

9

Spring AOP: HolaMundo (II)

Advice:

package spring.aop.ejemplos;

public class HelloWorldAdvice {

public void antes() {

System.out.println("Llamando a sayHello");

}

}

}

public void despues(Object ret) {

System.out.println("sayHello ha devuelto " + ret.toString());

Servidores de Información 2008/2009

19

Spring AOP: HolaMundo (III)

Fichero de configuración:

<beans xmlns="http://www.springframework.org/schema/beans"
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-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

<bean id="helloSrv" class="spring.aop.ejemplos.HelloWorldServiceImpl" />
<bean id="helloAdvice" class="spring.aop.ejemplos.HelloWorldAdvice" />

<aop:config>

<aop:aspect ref="helloAdvice">

<aop:pointcut id="sayHelloPointCut" expression="execution(* *.sayHello(..))" />
<aop:before method="antes" pointcut-ref="sayHelloPointCut" />
<aop:after-returning method="despues" pointcut-ref="sayHelloPointCut"

returning="ret" />

</aop:aspect>

</aop:config>

</beans>

Servidores de Información 2008/2009

20

10

Spring AOP: HolaMundo (y IV)

Main de la aplicación:

package spring.aop.ejemplos;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class Main {

public static void main(String[] args) {

ApplicationContext context = new

FileSystemXmlApplicationContext("src/spring/aop/ejemplos/spring-beans.xml");

HelloWorldService hello = (HelloWorldService)context.getBean("helloSrv");
System.out.println(hello.sayHello(args[0]));

}

}

Servidores de Información 2008/2009

21

Spring Data Access

11

Acceso a datos

Una estructura Java típica de acceso a BD:



public void saveWhatever(Whatever w) {

Connection conn = null;
PreparedStatement stmt = null;
try {
conn = dataSource.getConnection();
stmt = conn.prepareStatement(DB_QUERY);
...
stmt.execute();

} catch (SQLException e) {

} finally {
try {
if(stmt != null) { stmt.close(); }
if(conn != null) { conn.close(); }
} catch (SQLEx
  • Links de descarga
http://lwp-l.com/pdf11283

Comentarios de: Introducción a Spring (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad