Spring framework core 2017

vortexbird 357 views 31 slides Aug 18, 2017
Slide 1
Slide 1 of 31
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31

About This Presentation

Que es Spring
Arquitectura de Spring
Principales módulos de Spring
Inyección de dependencias
Programación orientada aspectos.
Configurando aplicación usando Spring
Instalar el contenedor de Inversión de Control de Spring (IoC)
Crear y configurar un Bean en el contenedor de Inversión de Control...


Slide Content

Spring Framework Core
Diego Armando Gómez Mosquera.
[email protected]
2017

Agenda
•Que es Spring
•Arquitectura de Spring
•Principales módulos de Spring
–Inyección de dependencias
–Programación orientada aspectos.
•Configurando aplicación usando Spring
–Instalar el contenedor de Inversión de Control de Spring (IoC)
–Crear y configurar un Bean en el contenedor de Inversión de Control .
–Usando el Auto-Writing Bean con XML
–Usando el Auto-Writing Bean con Anotaciones.

Que es Spring?
•Un frameworkcontenedor liviano basado en
la técnica Inversión de Control (IoC)y una
implementación de desarrollo según el
paradigma Orientado a Aspectos (AOP)

Que es Spring?
•Framework:porquedefinelaformadedesarrollar
aplicacionesJavaEE,dandosoporteysimplificando
complejidadpropiadelsoftwareempresarial.
•InversióndeControl(IoC):promueveelbajo
acoplamientoapartirdelainyeccióndedependencias
(DI)entrelosobjetos(relaciones).
•OrientaciónaAspectos(AOP):presentaunaestructura
simplificadaparaeldesarrolloyutilizacióndeaspectos
(módulosmultipleobjectcrosscutting).

Arquitectura de Spring

Spring Framework Artifacts
GroupIdArtifactId Description
org.springframeworkspring-aopProxy-based AOP support
org.springframeworkspring-aspectsAspectJ based aspects
org.springframeworkspring-beansBeans support, including Groovy
org.springframeworkspring-contextApplication context runtime, including scheduling and remoting abstractions
org.springframeworkspring-context-supportSupport classes for integrating common third-party libraries into a Spring application context
org.springframeworkspring-coreCore utilities, used by many other Spring modules
org.springframeworkspring-expressionSpring Expression Language (SpEL)
org.springframeworkspring-instrumentInstrumentation agent for JVM bootstrapping
org.springframeworkspring-instrument-tomcatInstrumentation agent for Tomcat
org.springframeworkspring-jdbcJDBC support package, including DataSourcesetup and JDBC access support
org.springframeworkspring-jmsJMS support package, including helper classes to send/receive JMS messages
org.springframeworkspring-messagingSupport for messaging architectures and protocols
org.springframeworkspring-ormObject/Relational Mapping, including JPA and Hibernate support
org.springframeworkspring-oxmObject/XML Mapping
org.springframeworkspring-testSupport for unit testing and integration testing Spring components
org.springframeworkspring-txTransaction infrastructure, including DAO support and JCA integration
org.springframeworkspring-webFoundational web support, including web client and web-based remoting
org.springframeworkspring-webmvcHTTP-based Model-View-Controller and REST endpoints for Servlet stacks
org.springframeworkspring-webmvc-portletMVC implementation to be used in a Portlet environment
org.springframeworkspring-websocketWebSocketand SockJSinfrastructure, including STOMP messaging support

Inyección de dependencias
•Dependency Injection (DI)
•Patrón de diseño orientado a objetos, en el
que se suministran objetos a una clase en
lugar de ser la propia clase quien cree el
objeto.
•El término fue acuñado por Martin Fowler.

Sin Inyección de dependencias
public class Vehiculo {
private Motor motor = new Motor();
/** @retorna la velocidad del vehículo*/
public Double enAceleracionDePedal(int presionDePedal) {
motor.setPresionDePedal(presionDePedal);
int torque = motor.getTorque();
Double velocidad = ... //realiza el cálculo
return velocidad;
}
}

Con Inyección de dependencias sin
contenedor o motor
public class Vehiculo {
private Motor motor = null;
public setMotor(Motor motor){
this.motor = motor;
}
/** @retorna la velocidad del vehículo*/
public Double enAceleracionDePedal(int presionDePedal) {
Double velocidad = null;
if (null != motor){
motor.setPresionDePedal(presionDePedal);
int torque = motor.getTorque();
velocidad = ... //realiza el cálculo
}
return velocidad;
}
}

Con Inyección de dependencias sin
contenedor o motor
//se omite la clase Motor ya que no es relevante para este ejemplo
public class VehiculoFactory {
public Vehiculo construyeVehiculo() {
Vehiculo vehiculo = new Vehiculo();
Motor motor = new Motor();
vehiculo.setMotor(motor);
return vehiculo;
}
}

Con Inyección de dependencias usando
Spring
public class Vehiculo {
@Autowired
private Motor motor;
public Double enAceleracionDePedal(int presionDePedal) {
Double velocidad = null;
motor.setPresionDePedal(presionDePedal);
int torque = motor.getTorque();
velocidad = ... //realiza el cálculo
return velocidad;
}
}

Con Inyección de dependencias con EJB
public class Vehiculo {
@EJB
private Motor motor;
public Double enAceleracionDePedal(int presionDePedal) {
Double velocidad = null;
motor.setPresionDePedal(presionDePedal);
int torque = motor.getTorque();
velocidad = ... //realiza el cálculo
return velocidad;
}
}

Con Inyección de dependencias con EJB
public class Vehiculo {
@Inject
private Motor motor;
public Double enAceleracionDePedal(int presionDePedal) {
Double velocidad = null;
motor.setPresionDePedal(presionDePedal);
int torque = motor.getTorque();
velocidad = ... //realiza el cálculo
return velocidad;
}
}

Inversión de control
•Inversion of Control (IoC)
•Es un método de programación en el que el flujo de ejecución de un
programa se invierte respecto a los métodos de programación
tradicionales, en los que la interacción se expresa de forma
imperativa haciendo llamadas a procedimientos (procedure calls) o
funciones. Tradicionalmente el programador especifica la secuencia
de decisiones y procedimientos que pueden darse durante el ciclo
de vida de un programa mediante llamadas a funciones. En su lugar,
en la inversión de control se especifican respuestas deseadas a
sucesos o solicitudes de datos concretas, dejando que algún tipo de
entidad o arquitectura externa lleve a cabo las acciones de control
que se requieran en el orden necesario y para el conjunto de
sucesos que tengan que ocurrir.

Inversión de control
•PrincipiodeHollywood
–“nonosllames;nosotrostellamaremos”
•Las implementaciones mas comunes:
–Callback
–Listener

Laboratorioinyección de
dependencias

Configurando aplicación usando Spring
•Agregar depencias de Spring
•Instalar el contenedor de Inversión de Control
de Spring (IoC)
•Crear y configurar un Bean en el contenedor
de Inversión de Control .
•Usando el Auto-Writing Bean con XML
•Usando el Auto-Writing Bean con
Anotaciones.

Spring con Maven
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
</dependencies>

applicationContext.xml
•Este archivo permite hacer las configuraciones de las
capacidades soportadas por Spring
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean name="persona" class="com.vortexbird.demo.modelo.Persona" >
</bean>
</beans>

Configurar un Bean
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean name="persona" class="com.vortexbird.demo.modelo.Persona" />
</beans>

Configurando el Bean con atributos
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean name="persona" class="com.vortexbird.demo.modelo.Persona" scope="prototype">
<property name="id" value="142020" />
<property name="nombre" value="Juan Perez" />
<property name="mail" value="[email protected]" />
</bean>
</beans>

Configurando el Beancon constructor
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean name="persona" class="com.vortexbird.demo.modelo.Persona"
scope="prototype">
<constructor-arg name="id" value="90893"/>
<constructor-arg name="nombre" value="Diego Gomez"/>
<constructor-arg name="mail" value="[email protected]"/>
</bean>
</beans>

Usando el Auto-WritingBeancon
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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean name="vehiculo" class="com.vortexbird.demo.modelo.Vehiculo"
autowire="byType"/>
<bean name="motor" class="com.vortexbird.demo.modelo.Motor"/>
</beans>

Usando el Auto-Writing Bean con Anotaciones
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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:annotation-config/>
<context:component-scan base-package="com.vortexbird.demo" />
</beans>

Escenarios de Uso

Typicalfull-fledgedSpring web
application

Spring middle-tier using a third-
Web

Remoting usage scenario

EJBs -Wrapping existing POJOs

Información de contacto
•Sitio Web: www.vortexbird.com
•Blog: http://blog.vortexbird.com
•Contacto vía mail: [email protected]
•Direccion: Calle 18 # 118-241 Oficina 21
•Teléfonos: +57 -(316 482 4629)