JPA, Hibernate y Spring

Anuncio
JPA, Hibernate y Spring
Rodolfo Campos
http://www.smartcamp.es/~camposer/indra/hibernate-spring/
Madrid, Septiembre de 2012
JPA, Hibernate y Spring
Fundamentos de Spring
Spring
Spring es un marco de trabajo (framework) Java que provee
una infraestructura liviana y robusta para soportar aplicaciones
Java.
●Spring maneja los detalles de infraestructura, para que los
desarrolladores puedan centrarse en el desarrollo per se. Para
lograr esto se apoya en técnicas ampliamente difundidas y
aceptadas, algunas de ellas: Inyección de Dependencias (DI) y
Programación Orientada a Aspectos (AOP)
●
Módulos
Inyección de Dependencias (DI)
Inyección de Dependencias (DI) o Inversión de Control (IoC) es
un proceso donde los objetos (beans) definen sus dependencias,
es decir, los objetos con los que trabajan, a través de:
●Argumentos de constructores
●Argumentos de un método factoría
●Propiedades del objeto una vez creado.
Configuración
Existen 3 formas de configurar beans de Spring
●XML
●Anotaciones.
●Java MetaData.
El método más difundido es el de configuración a través de XML
Configuración XML (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-3.0.xsd">
<import resource="services.xml"/>
<import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="petStore"
class="org.springframework.samples.jpetstore.services.PetStoreServiceImpl">
<property name="accountDao" ref="accountDao"/>
<property name="itemDao" ref="itemDao"/>
</bean>
</beans>
Instanciación
<!-- Constructor -->
<bean id="bar" class="x.y.Bar"/>
<bean id="foo" class="x.y.Foo">
<constructor-arg ref="bar"/>
<constructor-arg ref="baz"/>
<constructor-arg type="int" value="7500000"/>
</bean>
<!-- Factory Method -->
<bean id="exampleBean"
class="examples.ExampleBean2"
factory-method="createInstance"/>
<!-- Factory Object -->
<bean id="exampleBean"
factory-bean="serviceLocator"
factory-method="createInstance"/>
Espacio de nombres “p”
<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-beans3.0.xsd">
<bean name="classic" class="com.example.ExampleBean">
<property name="email" value="[email protected]"/>
</bean>
<bean name="p-namespace" class="com.example.ExampleBean"
p:email="[email protected]"/>
</beans>
Depends-on y Inicialización “lazy”
Depends-on:
●
<bean id="beanOne" class="ExampleBean" depends-on="manager"/>
Inicialización “lazy”
●
<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazyinit="true"/>
<beans default-lazy-init="true">
<!-- no beans will be pre-instantiated... -->
</beans>
Ámbitos de los beans
Singleton (por defecto)
●Prototype
●Request (HTTP Request)
●Session (HTTP Session)
●Global Session (típico de Aplicaciones Portlet)
●
Singleton
Prototype
Utilizando el contenedor
// create and configure beans
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[]
{"services.xml", "daos.xml"});
// retrieve configured instance
PetStoreServiceImpl service =
context.getBean("petStore",
PetStoreServiceImpl.class);
// use configured instance
List userList service.getUsernameList();
Utilizando el contenedor
...
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/services.xml</paramvalue>
</context-param>
<listener>
<listenerclass>org.springframework.web.context.ContextLoaderL
istener</listener-class>
</listener>
...
JPA, Hibernate y Spring
JPA + Spring
Spring, JPA y DAO
Persistence.xml
JpaTemplate
Persistence
EntityManager
Factory
EntityManagerFactoryBean
Query
EntityManager
Transaction
persist()
find()
merge()
delete()
Config – applicationContext.xml (#1)
Inject into
entityManagerFacto
r
transactionManager
Config – applicationContext.xml (#2)
Inject into
entityManagerFacto
r
DepartmentDAO
Inject into
JPAServiceBean
DAO - save
DAO - delete
DAO - update
DAO - findById
ServiceBean (#1)
ServiceBean (#2)
Recursos
Spring Documentation. Core Technologies: The IoC container.
Extraído el 16 de Septiembre de:
http://static.springsource.org/spring/docs/3.0.x/spring-frameworkreference/html/beans.html
●Guo, A. Spring + JPA + DAO. Step by Step. Extraído el 17 de
Septiembre de: http://www.slideshare.net/junyuo/spring-jpa-daostep-by-step-presentation
●Faria, A. Spring 3. Extraído el 17 de Septiembre de:
http://www.slideshare.net/andrefaria/spring-3
●
Descargar