Spring, conceptos básicos

Reading time ~2 minutes

Spring Framework logo En este post voy a intentar demostrar la sencillez de dos conceptos muy importantes en Spring:

  • Inversion of Control (IoC) = Inversión del Control.
  • Dependecy Injection(DI) = Inyección de Dependencias.

Inversion of Control & Dependency Injection

Es el proceso mediante el cual los objetos definen sus dependencias, bien mediante argumentos en el constructor, argumentos en un método factoría o propiedades que se asignan una vez el objeto está creado.”

La definición de estas dependencias se puede hacer con xml, anotaciones o mediante código java.

Formatos expresar dependencias

Entonces aparece en escena nuestro amigo el contenedor: Contenedor

 	org.springframework.context.ApplicationContext

Es el contenedor quien inyecta las dependencias al crear el bean.

Este proceso es el inverso a la creación de instancias o asignación de dependencias, tanto usando la creación directa de las mismas o un mecanismo como Service Locator Pattern.

Esquema funcionamiento contenedor Spring

Por resumirlo mucho: Es el contenedor quien hace el trabajo de crear instancias en lugar de las clases, de ahí el nombre Inversion of Control.(Inversión del control)

No mas “a = new A(….);” este trabajo sucio se lo dejamos al contenedor (IoC container).

Bean: Un bean es un objeto que es instanciado, ensamblado o gestionado por un IoC Container.

Una de las ventajas de usar un contenedor (IoC Container), es que la gestión de dependencias ya no se hace dentro de las clases. Cada clase o Bean es autocontenida, sólo tiene que preocuparse de su alcance, será el contenedor quien le proporcione las instancias de clases que necesita.

Alta cohesión y bajo nivel de acoplamiento.

Ejemplo

Este sencillo ejemplo muestra:

  • La configuración minima para ejecutar un Spring Container
  • Cómo funciona la IoC o DI a un nivel muy básico

logo gitHub Spring-01-Ioc-Di-concepts

logo Codenvy Codenvy

Configuración mínima

pom.xml en el cual vamos a declarar los paquetes de Spring que necesitamos

Sólo con spring-context ya nos basta.

Por dependencias transitivas, nos descargará también los paquetes del “core container”

<dependencies>
  	<dependency>
   	<groupId>org.springframework</groupId>
    	<artifactId>spring-context</artifactId>
    	<version>4.1.6.RELEASE</version>
	</dependency>
  </dependencies>  

Esquema paquetes Spring

Configuraciones

application-context.xml

      <!-- A simple bean definition -->
   <bean id="messageBean" class="me.itnotes.Message">
       <!-- collaborators and configuration for this bean go here -->
        <property name="message" value="Hola mundo. "/>
   </bean>

Pojo

public class Message {

  private String message;

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	
	public void processMessage(){
     message=" Este es el mensaje que tengo: " +message;
   }
}

Runner

public class Runner {

	public static void main(String[] args) {
	//Creamos el applicationContext con lo definido en application-context.xml
	ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/application-context.xml");   
	//Obtenemos el bean que se nos ha creado
	Message message = (Message) applicationContext.getBean("messageBean");
    //LLamada a un metodo tonoto del bean
    message.processMessage();
    System.out.println(message.getMessage());
    //Cerrar el applicationContext
    ((ConfigurableApplicationContext)applicationContext).close();
         
	}

}

Elastic IPs from EC2-Classic to EC2-VPC

Amazon AWS. Elastic IP from EC2-Classic to EC2-VPC Continue reading

Codenvy + Spring Pet Clinic

Published on February 05, 2016

Alternativa a Wordpress

Published on January 08, 2016