Ir al contenido principal

Inyección de dependencias en Java

 Inyección de dependencias en Java

Consiste en pasar la dependencia en la clase que lo va a utilizar en lugar de crearla internamente dentro de 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.

Por lo tanto en Spring cuando estamos usando nuestras interfaces en el repositorio correspondiente es necesario asignarles la notación que te mencioné: @Auatowired, de esta manera le damos el control para que cree esas instancias:


@Autowired
private ProductoCrudRepository productoCrudRepository;

@Autowired
private ProductMapper mapper;


Asi nos evitamos crear objetos manualmente ya que es una mala práctica y estaríamos violando el principio de inyección de dependencias, si no sabes porque no es una buena práctica aqui te lo explico: 


Forma incorrecta: 

public class ProductoRepository { // Creando instancias manualmente - MAL private ProductoCrudRepository repository = new ProductoCrudRepository(); private ProductMapper mapper = new ProductMapper(); }

Forma correcta (siguiendo DI):

@Repository public class ProductoRepository { // Spring se encarga de la inyección - BIEN private final ProductoCrudRepository repository; private final ProductMapper mapper; // Constructor injection (incluso mejor que @Autowired) public ProductoRepository(ProductoCrudRepository repository, ProductMapper mapper) { this.repository = repository; this.mapper = mapper; } }


Otra forma correcta y práctica:


@Autowired
private ProductoCrudRepository productoCrudRepository;

@Autowired
private ProductMapper mapper;

¿Por qué la primera forma viola el principio de DI?

  1. Alta acoplamiento: La clase está creando sus propias dependencias
  2. Difícil de testear: No podemos inyectar mocks fácilmente
  3. Control directo: La clase controla la creación de sus dependencias en lugar de recibirlas

¿Por qué la segunda forma es mejor?

  1. Bajo acoplamiento: La clase no sabe cómo se crean sus dependencias
  2. Fácil de testear: Podemos inyectar mocks para pruebas
  3. Inversión de Control: Spring controla la creación y ciclo de vida de las dependencias


Comentarios

Entradas más populares de este blog

Arquitectura N-Capas GUÍA COMPLETA .NET Core

Entendiendo la Arquitectura Limpia (Clean Architecture) en .NET: Una Guía Completa La Arquitectura Limpia, también conocida como arquitectura N-Capas, es un patrón de diseño que nos ayuda a crear aplicaciones mantenibles, testables y escalables. En este artículo, exploraremos en detalle cómo implementar esta arquitectura en un proyecto .NET. Si quieres entenderlo más fácil y con código, te dejo este otro artículo:   Arquitectura Limpia explicado con patitos 🐤 ¿Qué es la Arquitectura Limpia? La Arquitectura Limpia es un conjunto de principios de diseño que nos ayuda a separar las responsabilidades en diferentes capas de nuestra aplicación. Cada capa tiene una responsabilidad específica y se comunica con las otras capas a través de interfaces bien definidas. Estructura del Proyecto Una típica estructura de proyecto en Arquitectura Limpia se ve así: ├── Controllers/ │   └── ProductController.cs ├── Domain/ │   ├── Models/ │   └── DTOs/ ├── Repository/ │...

Archivo Application.properties en SPRING BOOT

  Guía Completa: Application.properties en Spring Boot El archivo application.properties es una pieza fundamental en aplicaciones Spring Boot, actuando como el centro de configuración para todo tu proyecto. En esta guía, exploraremos sus características principales y cómo aprovecharlo al máximo. ¿Qué es application.properties? Es un archivo de configuración que permite definir diferentes parámetros y valores para tu aplicación Spring Boot sin necesidad de modificar el código fuente. Se ubica en src/main/resources y Spring Boot lo lee automáticamente al iniciar. Configuraciones Esenciales Configuración del Servidor # Puerto del servidor server.port = 8080 # Contexto de la aplicación server.servlet.context-path = /miapp Conexión a Base de Datos # MySQL spring.datasource.url = jdbc:mysql://localhost:3306/mibasededatos spring.datasource.username = usuario spring.datasource.password = contraseña spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver JPA y Hibernat...

Kubernets (K8S) - PRIMEROS pasos

¡Hola, amantes de la tecnología! 👋 Si has escuchado hablar de Kubernetes pero aún no sabes por dónde empezar, este artículo es para ti. 🚢 Kubernetes, también conocido como K8s, es una herramienta poderosa para la gestión de contenedores que puede parecer intimidante al principio. Pero no te preocupes, aquí te guiaremos paso a paso para que puedas dominar los conceptos básicos y empezar a desplegar tus propias aplicaciones en un clúster de Kubernetes. 🌐 Prepárate para descubrir cómo esta tecnología puede transformar la manera en que desarrollas y despliegas tus aplicaciones. ¡Vamos a sumergirnos en el mundo de Kubernetes! 💻🚀 Vamos hacer un listado para lo que vamos a necesitar instalar:  Docker Desktop  Install Docker Desktop on Windows | Docker Docs   Kubectl  Install Tools | Kubernetes   MiniCube  https://minikube.sigs.k8s.io/docs/start Scoop ( opcional para instalar Kubecolor)  Scoop   Kubecolor ( opcional para colores en PowerShell)  ...