Inyección de Dependencias Basada en Setters en Spring

La inyección de dependencias (DI) es un patrón de diseño fundamental en el desarrollo de software, especialmente en frameworks como Spring. Existen principalmente dos enfoques para la inyección de dependencias: medianet el constructor y mediante setters. Este artículo se centrará en el enfoque de inyección a través de setters, explorando cómo inyectar diversos tipos de datos, incluyendo valores simples, referencias a otros beans, y colecciones como arrays, listas, mapas, conjuntos y propiedades, así como valores nulos.

Clase de Ejemplo: Address

Esta clase se utilizará para demostrar la inyección de un objeto bean como dependencia.


package com.example.di;

public class Address {
    private String location;

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    @Override
    public String toString() {
        return "Address{location='" + location + "'}";
    }
}

Clase Principal: Student

Esta clase ejemplifica cómo inyectar diferentes tipos de datos, incluyendo colecciones y otros beans.


package com.example.di;

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class Student {
    private String studentName;
    private Address studentAddress;
    private String[] studyMaterials;
    private List<string> leisureActivities;
    private Map<string string=""> identificationCards;
    private Set<string> favoriteGames;
    private String spouse;
    private Properties systemSettings;

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public Address getStudentAddress() {
        return studentAddress;
    }

    public void setStudentAddress(Address studentAddress) {
        this.studentAddress = studentAddress;
    }

    public String[] getStudyMaterials() {
        return studyMaterials;
    }

    public void setStudyMaterials(String[] studyMaterials) {
        this.studyMaterials = studyMaterials;
    }

    public List<string> getLeisureActivities() {
        return leisureActivities;
    }

    public void setLeisureActivities(List<string> leisureActivities) {
        this.leisureActivities = leisureActivities;
    }

    public Map<string string=""> getIdentificationCards() {
        return identificationCards;
    }

    public void setIdentificationCards(Map<string string=""> identificationCards) {
        this.identificationCards = identificationCards;
    }

    public Set<string> getFavoriteGames() {
        return favoriteGames;
    }

    public void setFavoriteGames(Set<string> favoriteGames) {
        this.favoriteGames = favoriteGames;
    }

    public String getSpouse() {
        return spouse;
    }

    public void setSpouse(String spouse) {
        this.spouse = spouse;
    }

    public Properties getSystemSettings() {
        return systemSettings;
    }

    public void setSystemSettings(Properties systemSettings) {
        this.systemSettings = systemSettings;
    }

    @Override
    public String toString() {
        return "Student{" +
               "studentName='" + studentName + '\'' +
               ", studentAddress=" + studentAddress +
               ", studyMaterials=" + java.util.Arrays.toString(studyMaterials) +
               ", leisureActivities=" + leisureActivities +
               ", identificationCards=" + identificationCards +
               ", favoriteGames=" + favoriteGames +
               ", spouse='" + spouse + '\'' +
               ", systemSettings=" + systemSettings +
               '}';
    }
}
</string></string></string></string></string></string></string></string></string>

Clase de Prueba y Configuración XML

La siguiente clase demuestra cómo configurra y obtener un bean de estudiante utilizando Spring XML.


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.example.di.Student;

public class TestDI {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Student studentBean = (Student) context.getBean("student1");
        System.out.println(studentBean);
    }
}

Archivo de configuración applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- Bean para la dependencia de dirección -->
    <bean id="addressBean" class="com.example.di.Address">
        <property name="location" value="Ciudad Central"/>
    </bean>

    <!-- Bean principal del estudiante con inyección por setter -->
    <bean id="student1" class="com.example.di.Student">
        <property name="studentName" value="Ana Pérez"/>
        <property name="studentAddress" ref="addressBean"/>

        <property name="studyMaterials">
            <array>
                <value>Física Cuántica</value>
                <value>Algoritmos Avanzados</value>
                <value>Historia del Arte</value>
            </array>
        </property>

        <property name="leisureActivities">
            <list>
                <value>Senderismo</value>
                <value>Fotografía</value>
                <value>Cocina</value>
            </list>
        </property>

        <property name="identificationCards">
            <map>
                <entry key="ID de Estudiante" value="S12345"/>
                <entry key="Licencia de Conducir" value="L98765"/>
                <entry key="Pasaporte" value="P00001"/>
            </map>
        </property>

        <property name="favoriteGames">
            <set>
                <value>Ajedrez</value>
                <value>Estrategia en Tiempo Real</value>
                <value>Simulación</value>
            </set>
        </property>

        <property name="spouse">
            <null/>
        </property>

        <property name="systemSettings">
            <props>
                <prop key="usuario">admin</prop>
                <prop key="clave">seguro123</prop>
                <prop key="idioma">es</prop>
            </props>
        </property>
    </bean>

</beans>

Etiquetas: Spring Inyección de Dependencias Setters java XML

Publicado el 6-25 20:35