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>