Antes de empezar

1

Pasos para aprender Java Spring

2

¿Java sigue siendo gratuito?

3

Instalación de ambiente de desarrollo: Windows

4

Instalación de ambiente de desarrollo: Linux Ubuntu

5

Instalación de ambiente de desarrollo: macOS

Introducción a Spring boot

6

¿Qué es y qué usaremos de Spring?

7

Qué es una aplicación autocontenida

8

Crear nuestra aplicación con Spring Initializr

9

Hola mundo con Spring Boot

10

Configurar Spring Boot

11

Crear la estructura del proyecto

Spring Data

12

¿Qué es JPA?

13

Conocer qué es Spring Data

14

Conectar la base de datos a nuestra aplicación

15

Mapear las tablas como clases

16

Crear Entity cuando su clave primaria es compuesta

17

Mapear relaciones entre clases

18

Usar la interface CrudRepository

19

Query Methods

Construyendo nuestra API

20

Implementar la anotación @Repository

21

¿Qué es el patrón Data Mapper y qué resuelve?

22

Orientar nuestra API al dominio con MapStruct

23

Orientar nuestro repositorio a términos del dominio

24

Inyección de dependencias

25

Implementar la anotación @Service

26

Implementar la anotación @RestController

27

Exponer nuestra API

Mejorando nuestra API

28

Controlar las respuestas HTTP

29

Crear el dominio de compras

30

Mapear el dominio de compras

31

Crear el repositorio de compras

32

Probando nuestros servicios de compras

33

Documentar nuestra API con Swagger

Despliegue de nuestra aplicación

34

Desplegar nuestra API desde la ventana de comandos

35

Desplegar nuestra base de datos con Heroku

36

Desplegar nuestra API con Heroku

37

Conclusiones y despedida del curso

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Java Spring

Curso de Java Spring

Alejandro Ramírez

Alejandro Ramírez

Inyección de dependencias

24/37
Recursos

Aportes 29

Preguntas 14

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Por favor, preferir la inyección de dependencias a nivel del constructor. Para más información leer este enlace.

Inyección de dependencias: pasar la dependencia a la clase que lo va a utilizar en lugar de crearla internamente dentro esa clase. Esto con el fin de no acoplar la clase a la implementación que esta utilizando.
Inversión de control: es un framework quien toma control de los objetos. En este caso Spring. El cual se encarga de crear y administrar instancias de objetos que se conocen como builds o componentes.
Entonces Spring usa la notación @Autowired para la inyección de dependencias.

Hay que corregir el video, Solid no tiene inyeccion de Dependencias tiene es Inversion de dependencias, la cual es basada en relaciones abstractas, como lo consigues usando injeccion pero no son lo mismo y Solid no lo tiene como principio.

Excelente explicacion, yo lo hacia porque un dia me dijeron que se debia hacer y ya. Me ha gustado mucho este curso.

Al agregar el @Autowired al ProductMapper me dice q ningun bean autowired se encontro en ProductMapper

Could not autowire,No beans of 'ProductMapper' type found

Me sale el siguiente error en respuestas anteriores dicen que cheque los getter y stter poir favor explicar bien sus respuestas sin utilizar lombok ya que eso no se esat usando en los videos gracias de antemano.

Si les aparece error de los atributos “productos” y “categoria” no se preocupen por ahora, en la clase “26. Implementar la anotación @RestController” Jose comparte la solución

se pone complicada la cosa xD

¡Incrible!, no entendía el porque aveces mi API soltaba errores y siempre tenía que ver con las anotaciones además de la inyección de dependencias. Ahora sé que es necesario que hagan parte de Spring para inyectar las dependecias.

¡Gracias!

Esta clase tiene grandes errores conceptuales, y me parece muy grave que Platzi y su equipo de educación no controlen este tipo de cosas. Por suerte, en este blog se explica las diferencias entre Inversión de Dependencias, Inyección de Dependencias, eInversión de Control.

*La url la comparto con https ya que Platzi no permite compartir sitios no seguros. Para ver bien el contenido, solo quiten la “s”.

Hay que aclarar un error, en el video se dice que uno de los principios SOLID es la Inyeccion de Dependencia…el principio SOLID en cuestion es la Inversion de dependencia…hay que tener bien claros estos dos conceptos para no confundirlos y entender su significado.

No hay que confundir INVERSION DE DEPENDENCIA (que es parte de los principios SOLID) con INYECCION DE DEPENDENCIAS que es lo que hacemos con Spring. La INYECCION, puede hacerse gracias a la aplicacion de la INVERSION. Pero no son sinonimos.

Spring es un marco para Inversion of Control, lo que significa que para usarlo, tenemos que empaquetar nuestro código en clases de componentes individuales, diciéndole a Spring qué componentes se necesitan entre sí para funcionar. Spring toma las clases de componentes que definimos y las dependencias que definimos entre ellas e instancia un sistema de coincidencia de objetos Java con referencias entre sí. Esto nos libera de tener que escribir el llamado “código adhesivo” para crear instancias, conectar y administrar componentes manualmente, y nos permite, en cambio, centrarnos en escribir la llamada lógica empresarial, o código que se ocupa exclusivamente del modelo conceptual del solicitud.

Si se escoge la inyección de dependencias a nivel de constructor, entiendo que puedo o debo colocar a los atributos (aquellos que son Components de Spring) como final:

@Repository
public class ProductRepositoryImpl implements ProductRepository {
    private final ProductCrudRepository productCrudRepository;
    private final ProductMapper mapper;

    public ProductRepositoryImpl(ProductCrudRepository productCrudRepository, ProductMapper mapper) {
        this.productCrudRepository = productCrudRepository;
        this.mapper = mapper;
    }

    // more code

De ser así, se puede usar una facilidad de Lombok: @RequiredArgsConstructor para que se reduzca un poco el código.

@Repository
@RequiredArgsConstructor
public class ProductRepositoryImpl implements ProductRepository {
    private final ProductCrudRepository productCrudRepository;
    private final ProductMapper mapper;
    
    // more code

https://projectlombok.org/features/constructor

Al poner la inyección a nivel de campo, salio el siguiente mensaje en intellij “Field injection is not recommended”, adjunto la conclusión de un aporte en stackoverflow (https://stackoverflow.com/questions/39890849/what-exactly-is-field-injection-and-how-to-avoid-it)

SOLID hace referencia a la Inversion de Dependencia, que no es lo mismo (aunque si tiene que ver) con la** inyeccion de dependencia** que ofrese Spring. Por otro lado, la Inversion de control tiene que ver con el “Principio Holliwood” (no nos llames, nosotros te llamamos) y no se limita solo a la inyeccion de dependencias…para ampliar un poco simplementeo, espero que sirvan los comentarios. Muy buen curso !!

Solid

  • Single responsability
  • Open-closed
  • Liskov sustitution
  • Interface segregation
  • Dependency injection

Sigue sorprendiéndome lo que se puede hacer en java

Una de las explicaciones mas sencillas y faciles de entender que que he visto sobre que es la inyeccion de dependencias.

Que buena explicación Alejandro, no lo había comprendido tan bien.

Sobres, verifiquen bien sus mapeos para que no anden viendo qué anda mal durante horas como yo 😕

Hola a todos, he disfrutado mucho del curso.
Queria compartirles el error que me sucedia a mi, por si a alguien le pasa lo mismo, puede ser algo tonto, pero si a alguien le pasa lo mismo que tenga esto en cuenta, en el producMapper estamos usando el mapper de categoria, pero este mapeo no funciona si categoria no tiene getters y setters en la clase Producto, saltara un error de que no encuentra el atributo categoria.
Saludos.

Por mi parte es bueno hacer el autowired desde un contructor para que sea facil de testear

Más información sobre @beans
https://www.baeldung.com/spring-bean

A quienes les salga error con eclipse y mapstructs
lo solucioné con dos cosas:

  1. Clic derecho sobre el proyecto -> propiedades -> Java Compiler -> Annotation Processing ->
    Se debe checkear Enable project specific settings
  2. Clic derecho sobre el proyecto -> propiedades -> Java Compiler -> Annotation Processing -> Factory Path ->
    Se debe checkear Enable project specific settings
    -> Add External Jar -> Aquí buscar el jar del plugin es una ruta similar:
    C:\Users\pepito.gradle\caches\modules-2\files-2.1\org.mapstruct\mapstruct-processor\1.4.2.Final\e55bd90d51cddd638c07d5bd89fc7535d4e3d069\mapstruct-processor-1.4.2.Final

Ahora Aplicar y Cerrar

autowired en articulosRepository

El significado de la anotación.