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

Ejemplo de inyección de setter (con objetos relacionados)

Si hay objetos dependientes en la colección, se puede usar list , set en ref elementos para inyectar esta información. O Map. Aquí, vamos a property Se utilizan elementos de lista, set o map en los elementos.

En este ejemplo, tomamos como ejemplo un foro en el que Un problema puede tener múltiples respuestas. Pero 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. Sin embargo, debe cambiar la lista configurada en el archivo applicationContext.xml y la lista configurada en el archivo Question.java.

Question.java

Este clase contiene tres propiedades, 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;
//setters and getters
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

此类具有三个属性id,name和by构造函数和toString()方法。

package com.w3codebox;
public class Answer {
private int id;
private String name;
private String by;
//setters and getters
public String toString(){
    return id+" ""+name+" ""+by;
}
}

applicationContext.xml

ref 元素用于定义另一个bean的引用。在这里,我们使用 ref 元素的 bean 属性来指定另一个bean的引用。

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    xmlns:p="http://www.springframework.org/schema/p
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="answer1" class="com.w3codebox.Answer">
<property name="id" value="1></property>
<property name="name" value="Java is a programming language"></property>
<property name="by" value="Ravi Malik"></property>
</bean>
<bean id="answer2" class="com.w3codebox.Answer">
<property name="id" value="2></property>
<property name="name" value="Java is a platform"></property>
<property name="by" value="Sachin"></property>
</bean>
<bean id="q" class="com.w3codebox.Question">
<property name="id" value="1></property>
<property name="name" value="What is Java?"></property>
<property name="answers">
<list>
<ref bean="answer1"/>
<ref bean="answer2"/>
</list>
</property>
</bean>
</beans>

Test.java

Esta clase obtiene el Bean del 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();
    
}
}