ARCmop Java Programacion Solaris Linux

Java-linux-programacion

Spring: Primera aproximacion

Posted by Cmop en diciembre 1, 2010

Ultimamente estuve viendo ejemplos de Spring, y me he dado cuenta que todos hablan del IOC (inversion de control) o también conocido como “El principio de Hollywood” dada la frase tipica de los casting “No nos llames nosotros te llamaremos”, bueno según entiendo esto aplicado a la programación lo que quiere decir es que las clases (A) que necesiten a otra (B) no deben instanciarla ( i.e. private B b; ) ni crearla ( b= new B( ) ; ) sino que esta dependencia es configurada en archivos XML con lo que podemos mejorar el rendimiento, pero ¿como? esa es la pregunta!.

Bien imaginemos que requerimos de una clase que se conecta a una BD, si tenemos varias implementaciones de A, ellas invocaran cada una a su respectiva B lo cual originaría una carga adicional, asi como consumo de recursos. Una posible solución a esto es usar una clase estática para crear el objeto una vez y luego accederlo desde cualquier clase, pero y donde quedan las buenas prácticas y los patrones de diseño??????, además que deberia controlarse manualmente el ciclo de vida de la ejecucion. Una mejor alternativa ¿? SPRING, este fabuloso framework controla el ciclo de vida de las ejecuciones, además de simplificar muchas cosas, en este caso las excepciones SQL.

Creo que ha sido una explicación sencilla, pero y ¿como lo hace?, bueno como es mi iniciación en Spring, pondré un gráfico que según mi juicio pasa en la aplicación de ejemplo que he programado .

He querido cambiar los nombres en las instancias de ser posible, ya que en los ejemplos que revisé, le ponian el mismo nombre a todo, y asi no se puede diferenciar en que momento se resuelven las dependencias.

 

ejemplo spring
ejemplo spring

Espero que el grafico no sea confuso😄.

A ver como lo explico, para hacerlo más sencillo las lineas punteadas representan las dependencias, y las continuas mas o menos una secuencia.

Pero y por donde empezamos? –> Veamos, yo empezare a explicar por el “despachador”  y el “Contexto de aplicación”, ambos archivos de configuración el primero es quien se encarga de enlazar los componentes de la aplicación para mantener el esquema MVC. y el segundo inicializa el Contexto de Ejecución para poder acceder a los servicios cuando los necesitemos. Ahora un detalle a tener en cuenta es el “CommandName” que junto al “CommandClass” permitirán el acceso sin tener que crear nada en la vista (index.jsp), los campos nombre,apellidos y edad (en index.jsp) serán retornados (getter) y asignados (setter) a través de su GET y SET contenidos en la clase Persona, como se observa este proceso es transparente al programador.

Bueno, Colocare el codigo de los archivos:

index.jsp


<%@taglib uri="http://www.springframework.org/tags" prefix="spring"  %>
 <%@page contentType="text/html" pageEncoding="UTF-8"%>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">

 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>PRUEBA CRUD DE TABLA PERSONA</title>
 </head>
 <body>
 <spring:nestedPath path="afe">
 <form action="" method="post">
 <table align="center">
 <tr>
 <td>Nombres</td>
 <td>
 <spring:bind path="nombre">
 <input type="text" name="${status.expression}" value="${status.value}" >
 </spring:bind>
 </td>
 </tr>
 <tr>
 <td>Apellidos</td>
 <td>
 <spring:bind path="apellidos">
 <input type="text" name="${status.expression}" value="${status.value}">
 </spring:bind>
 </td>
 </tr>
 <tr>
 <td>Edad</td>
 <td>
 <spring:bind path="edad">
 <input type="text" name="${status.expression}" value="${status.value}">
 </spring:bind>
 </td
 </tr>
 <tr>
 <td></td>
 <td><input type="submit" value="OK"></td>
 </tr>
 </table>
 </form>
 </spring:nestedPath>
 </body>
 </html>

respuesta.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">

<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>RESPUESTA DEL SERVIDOR</title>
 </head>
 <body>
 <h1>${respuestaServidor}</h1>
 </body>
</html>

ControladorPersona

package controlador;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import servicio.ServiciosPersona;

/**
 *
 * @author Martin
 */
public class ControladorPersona extends SimpleFormController {

 public ControladorPersona() {
 setCommandClass(Persona.class);
 setCommandName("afe");
 setSuccessView("respuesta");
 setFormView("index");
 }

 @Override
 protected ModelAndView onSubmit(Object command) throws Exception {
 Persona persona= (Persona)command;
 ModelAndView mv= new ModelAndView(getSuccessView());
 mv.addObject("respuestaServidor", serviciopersona.imprimeDatos(persona.getNombre(), persona.getApellidos(), persona.getEdad()));
 return mv;
 }

 private servicio.ServiciosPersona serviciopersona;

 public void setServiciopersona(ServiciosPersona serviciopersona) {
 this.serviciopersona = serviciopersona;
 }
}

Persona

package controlador;

/**
 *
 * @author Martin
 */
public class Persona {

 public String getApellidos() {
 return apellidos;
 }

 public void setApellidos(String apellidos) {
 this.apellidos = apellidos;
 }

 public Integer getEdad() {
 return edad;
 }

 public void setEdad(Integer edad) {
 this.edad = edad;
 }

 public String getNombre() {
 return nombre;
 }

 public void setNombre(String nombre) {
 this.nombre = nombre;
 }

 private String nombre;
 private String apellidos;
 private Integer edad;
}

ServiciosPersona


package servicio;

/**
 *
 * @author Martin
 */
public class ServiciosPersona {

 public String imprimeDatos(String nombre,String apellidos, Integer edad){
 String rpta="";
 rpta="Hola "+nombre+" "+apellidos+", tienes "+edad+" años";
 return rpta;
 }
}

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

 <bean name="servicioPersona" class="servicio.ServiciosPersona"/>
</beans>

dispatcher-servlet


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

 <bean/>
 <bean name="personita"

 p:serviciopersona-ref="servicioPersona" />

 <!--
 Most controllers will use the ControllerClassNameHandlerMapping above, but
 for the index controller we are using ParameterizableViewController, so we must
 define an explicit mapping for it.
 -->
 <bean id="urlMapping">
 <property name="mappings">
 <props>
 <prop key="index.htm">personita</prop>
 </props>
 </property>
 </bean>

 <bean id="viewResolver"

 p:prefix="/WEB-INF/jsp/"
 p:suffix=".jsp" />

 <!--
 The index controller.
 -->

 <bean name="indexController"

 p:viewName="index" />
</beans>

Bien ahora veamos el resultado:

ejemplo spring

ejemplo spring

ejemplo spring

ejemplo spring

Bueno eso es todo, subire los archivos a mediafire por si alguien quiere bajarse el codigo empaquetado. AQUI

Esta entrada va dedicada  a AFE.

Saludos a todos.

6 comentarios to “Spring: Primera aproximacion”

  1. PalituxD said

    BUENA APORTE

  2. Gracias🙂

  3. Vic said

    con que version de spring trabajaste?. la aplicacion no me corre

  4. jesus macias said

    lo adapte a otro ejemplo y me sale error en esta linea

    mv.addObject(“respuestaServidor”, ServiceAlumno.imprimeDatos(Alumno.getClave(),Alumno.getNombreAlumno()));

    espero me puedas ayudar…!!!!

  5. Cesar Chavez B. said

    oye Jesus, dime una cosa. Como tienes implementada la funcion imprimeDatos de la clase ServicioPersonas?

  6. Oscar LG said

    Buen aporte funciono sin tirar ningun todo bien utilizando Netbeans 8.0.1 spring 3.2.7 MVC y GlassFish Server 4.1 Java EE 6 Web JDK 8

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: