Introduccion Spring
Introduccion Spring
Introduccion Spring
BDI
Andrés Guzmán F.
Formación BDI TI
Bolsadeideas.com
Temas
¿Qué es Spring Framework?
Arquitectura de Spring
Escenarios de uso
Herramientas necesarias
Temas
¿Qué es y por qué Inyección de Dependencias
(DI)?
Tipos de parámetros DI
Bean naming
Anotación @Autorwired
Auto-scanning
¿Qué es Spring
Framework?
¿Qué es Spring Framework?
Es un robusto Framework para el Desarrollo
de Aplicaciones Empresariales en el lenguaje
Java
• Facilidad de configuración
Se elimina la mayor parte del
código repetitivo y la configuración
de XML a partir de sus
aplicaciones y mayor uso de
anotaciones
¿Por qué usar Spring Framework?
• AOP (Aspect Oriented Programming)
Programación declarativa AOP,
paradigma de programación que
permite modularizar las aplicaciones
y mejorar la separación de
responsabilidades entre módulos
y/o clases aspectos
Facilidad de configurar aspectos,
soporte de transacciones, seguridad
• Diseño orientado a interfaces
Programación basadas en contratos
de implementación, permitiendo al
usuario centrarse en la
funcionalidad, ocultando el detalle
de implementación
¿Por qué usar Spring Framework?
• Plenamente probado, seguro y confiable
Spring ha sido probado y utilizado
en diversos proyectos alrededor del
mundo, como en Instituciones
Bancarias, Aseguradoras,
Instituciones Educativas y de
Gobierno, entre muchos otros
tipos de proyectos y empresas
• Productividad
Ganancias de productividad y una
reducción en el tiempo de
desarrollo e implementación
utilizando Spring
¿Por qué usar Spring Framework?
• Integración con otras Tecnologías
EJB 3.2 (Lógica de negocio)
JPA, Hibernate, iBates, JDBC
(Pesistencia)
Velocity, etc (Vista)
JSF2, Struts, etc (Capa web)
• Otras Razones
Bien diseñado
Abstracciones aíslan detalles de la
aplicación, eliminando código
repetitivo
Fácil de extender
Muchas clases reutilizables
Arquitectura
de Spring
Arquitectura Spring
Arquitectura Spring
Arquitectura Spring
La arquitectura se compone en distintas
capas, cada una tiene su función específica:
Inyección de dependencia
DI Spring
Contenedor DI
Spring Java Beans
Entities
Contexto de persistencia
Hibernate
Resuelve el problema de
reutilización y modularidad
entre componentes
Inyectar es justamente
suministrar a un objeto
una referencia de otros
que necesite según la
relación, tiene que
plasmarse mediante
configuración XML o la
anotación @Autowired
"Principio Hollywood"
No nos llames, nosotros te
llamaremos
También es un tipo de Inversión de
Control (IoC):
• En contra-oposición de la creación
explícita (operador new) de objetos
(pull)
• El "Contenedor" se encarga de
gestionar las instancias y relaciones
(así como sus creaciones y
destrucciones) de los objetos
Hibernate
Session
Atributos y/o HibernateDao
Objetos
El controlador ya
La página JSP o vista Hibernate
contiene las
puede acceder a objetos Session
dependencias inyectadas
enviados por el
controller
Por Qué Inyección
de Dependencia
Testable con clases
Flexible
POJO
Interface Clases de
BeanFactory implementación
• Una vez creado el objeto • XmlBeanFactory
BeanFactory, nuestra • ClassPathXmlApplicationC
aplicación ya puede ontext
acceder al los objetos
beans vía la interface
BeanFactory
BeanFactory vs ApplicationContext
Leyendo archivo de configuración
XML vía Clase XmlBeanFactory
Ejemplo 1
public class ConfigXmlUsandoBeanFactory {
BeanFactory factory =
new ClassPathXmlApplicationContext("/beans.xml");
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/be
ans http://www.springframework.org/schema/beans/spring-
beans.xsd">
</beans>
Archivo de Configuración Bean XML
Ejemplo DI vía Setter
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/be
ans http://www.springframework.org/schema/beans/spring-
beans.xsd">
</beans>
Archivo de Configuración Bean XML
Ejemplo DI vía Constructor
<beans>
<bean id="injectSimple" class="InjectSimple">
<property name="nombre">
<value>Andres GF</value>
</property>
<property name="edad">
<value>35</value>
</property>
<property name="altura">
<value>1.78</value>
</property>
<property name="esProgramador">
<value>true</value>
</property>
</bean>
</beans>
Inyectando otros Beans
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/be
ans
http://www.springframework.org/schema/beans/spring-
beans.xsd">
</beans>
Inyectando Beans Ejemplo 2
<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/be
ans
http://www.springframework.org/schema/beans/spring-
beans.xsd">
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/be
ans http://www.springframework.org/schema/beans/spring-
beans.xsd">
</beans>
Bean Naming
Bean Naming
Procedimiento para la
resolución de nombre
del "bean"
Cada "bean" debe • Si la etiqueta "<bean>" tiene
tener al menos un un atributo "id", el valor del
atributo "id" se utiliza como
nombre que es único
el nombre del "bean"
dentro del contenedor • Si no hay ningún atributo
de Spring "id", Spring busca el atributo
(BeanFactory) "name"
• Si ninguno de ellos se
definen, Spring utilizar el
atributo "class" (nombre de la
clase) como el nombre
Bean Naming
<bean name="miBeanNombre"
class="com.formacionbdi.AlgunaClase"/>
<bean class="com.formacionbdi.AlgunaClase"/>
@Autowired
private Direccion direccion;
</beans>
Auto-scanning
Auto-scanning
• Puede ser usado para crear instancias
de los objetos beans (en lugar de
declararlos en el archivo de
configuración XML)
• Asume la configuración
<context:annotation-config />
Auto-scanning
• Los beans deben ser anotado con la
anotación @Component
• Cualquier beans anotado con
@Component bajo el package
mi.package serán instanciados y
manejados por el contenedor DI de
Spring
Bean anotado con @Component
package com.formacionbdi.dominio;
import org.springframework.stereotype.Component;
@Component
public class Direccion {
}
Ejemplo Auto-scan XML Contexto
<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/spring-context.xsd">
</beans>
Gracias!
Andrés Guzmán F.
Formación BDI TI
Bolsadeideas.com