English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ejemplo de inyección de constructor (con objeto dependiente)

Si la colección tiene objetos dependientes, se puede usar list , set en elemento elementos para inyectar esta información. O Map

En este ejemplo, tomamos como ejemplo "foro", donde Un problema puede tener múltiples respuestasPero Answer tiene su propia información, como answerId, answer y postedBy. En este ejemplo se utilizan cuatro páginas:

Question.java Answer.java applicationContext.xml Test.java

En este ejemplo, la lista que utilizamos puede contener elementos repetidos, puede usar un set que solo contenga elementos únicos. Pero, necesitas cambiar la lista configurada en el archivo applicationContext.xml y la lista configurada en el archivo Question.java.

Question.java

Este clase contiene tres atributos, dos constructores y el método displayInfo() para mostrar información. Aquí, utilizamos una lista para contener múltiples respuestas.

package com.w3codebox;
import java.util.Iterator;
import java.util.List;
public class Question {
private int id;
private String name;
private List<Answer> answers;
public Question() {}
public Question(int id, String name, List<Answer> answers) {
    super();
    this.id = id;
    this.name = name;
    this.answers = answers;
}
public void displayInfo(){
    System.out.println(id+" "+name);
    System.out.println("answers are:");
    Iterator<Answer> itr = answers.iterator();
    while(itr.hasNext()){
        System.out.println(itr.next());
    }
}
}

Answer.java

Esta clase tiene tres propiedades id, name y by, constructor y método toString().

package com.w3codebox;
public class Answer {
private int id;
private String name;
private String by;
public Answer() {}
public Answer(int id, String name, String by) {
    super();
    this.id = id;
    this.name = name;
    this.by = by;
}
public String toString(){
    devolver id+" "+nombre+" "+por;
}
}

applicationContext.xml

elemento ref se utiliza para definir una referencia a otro bean. Aquí, utilizamos elemento de elemento Propiedades para especificar una referencia a otro bean.

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/esquema/beans
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instancia
    xmlns:p="http://www.springframework.org/esquema/p
    xsi:schemaLocation="http://www.springframework.org/esquema/beans 
http://www.springframework.org/esquema/beans/spring-beans-3.0.xsd">
<bean id="ans1" class="com.w3codebox.Respuesta">
<constructor-arg value="1></constructor-arg>
<constructor-arg value="Java es un lenguaje de programación"></constructor-arg>
<constructor-arg value="John"></constructor-arg>
</bean>
<bean id="ans2" class="com.w3codebox.Respuesta">
<constructor-arg value="2></constructor-arg>
<constructor-arg value="Java es una Plataforma"></constructor-arg>
<constructor-arg value="Ravi"></constructor-arg>
</bean>
<bean id="q" class="com.w3codebox.Pregunta">
<constructor-arg value="111></constructor-arg>
<constructor-arg value="What is java?"></constructor-arg>
<constructor-arg>
<lista>
<ref bean="ans1"/>
<ref bean="ans2"/>
</lista>
</constructor-arg>
</bean>
</beans>

Test.java

Esta clase obtiene el Bean desde el archivo applicationContext.xml y llama al método displayInfo.

package com.w3codebox;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class Test {
public static void main(String[] args) {
    Resource r = new ClassPathResource("applicationContext.xml");
    BeanFactory factory = new XmlBeanFactory(r);
    
    Question q = (Question)factory.getBean("q");
    q.displayInfo();
    
}
}