CS2031:

Desarrollo Basado en Plataformas

Semana 03: API con Spring Boot

Contenido

  • Java
     
  • Dependency Injection (DI)
     
  • Spring Boot
     
  • Lab 02: Desarrollo de un API con Spring Boot

Contenido

Java - Hello World

Dependency Injection (DI)

Let's build a Notification Center !

Dependency Injection (DI)

Ventajas

  • Desacoplación: Código más limpio y legible.
  • Facilita el mantenimiento del código:
    • No conoce el detalle de la implementación de sus dependencias.
    • No necesita cambiar cuando lo hacen sus dependencias.
  • Facilita el testeo (*)

Spring

¿Qué es Spring?

* Framework

* Open Source

* Modular (*)

¿Qué nos ofrece?

* Inyección de Dependencias

* MVC

* Seguridad

* Acceso a datos, etc.

¿Qué debemos configurar?

  • Cantidad de instancias de una clase.
    • Identificar las instancias con un nombre específico
       
  • Dependencias que queremos resolver.

¿Cómo configuramos en Spring?

  • Podemos usar:
    • XML
    • Anotaciones
  • Ventajas de las Anotaciones:
    • Simplicidad
    • Mantenibilidad
    • Flexibilidad

Pero...¿Qué son las anotaciones?

  • Meta-información.
  • Ejemplo: @Override, para sobrescribir un método.
  • Las podemos usar:
    • Previo a una firma de un método
    • Previo a la declaración de una clase
    • Previo a una parámetro en una función
    • Previo a un atributo
public Class Position {
	private Double x;
    private Double y;
    
    public Position(Double x, Double y) {
    	this.x = x;
        this.y = y;
    }
    
    @Override
    public boolean hashCode() {
    	return Objects.hash(x, y);
    }
}

@Component

  • Le informa a Spring que debe instanciar la clase.
  • Por default, solo se creará una única instancia (Singleton).
  • Se agrega previo a la declaración de una clase.
  • Otras anotaciones con el mismo significado:
    • @Service
    • @Repository
@Component
public class PokemonService {

}

@Autowired

  • Le informa a Spring que debe encargarse de resolver las dependencias.
  • Se puede usar:
    • Antes del constructor: (Recomendado) Resuelve todos los parámetros que recibe desde su instanciación.
    • Previo al Setter: Usará el setter para inyectar la dependencia y solo usará los que tengan la anotación.
    • Previo al atributo: No es recomendable, pero solo resuelve la inyección de dicho atributo.
@Component
public class PokemonService {

	private final PokemonRepository repository;    
    private final OtraDependencia otraDependencia;
    
    @Autowired
    public PokemonService(PokemonRepository repository, OtraDependencia otraDependencia) {
    	this.repository = repository;
        this.otraDependencia = otraDependencia;
    }
}

@Bean & @Configuration

@Bean

Permite generar la construcción manual de ciertas instancias complejas.

 

@Configuration

Identificar la clase donde podremos agregar los Bean.

@Configuration
public class AppConfiguration {
	@Bean
    public Pokemon getPokemon() {
    	return new Pokemon("Pikachu");
    }
}

Let's build!

Lab.02

References

Desarrollo Basado en Plataformas - Spring Boot

By Jorge Rios

Desarrollo Basado en Plataformas - Spring Boot

  • 198