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

ejemplo de inyección de dependencias con mapeo no de cadena

En este ejemplo, utilizamos map Como respuesta con Answer y User. Aquí, utilizamos tanto la clave como el valor del par como objetos. La respuesta tiene su propia información, como answerId, respuesta y postedDate, y el usuario tiene su propia información, como userId, nombre de usuario, emailId.

Como en el ejemplo anterior, es un ejemplo de foro entre Un problema puede tener múltiples respuestas

Question.java

Esta clase contiene tres propiedades, es decir, métodos getters y setters y el método displayInfo() para mostrar información

package com.w3codebox;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
public class Question {
private int id;
private String name;
private Map<Answer,User> answers;
//getters and setters
public void displayInfo(){
    System.out.println("question id:")+id);
    System.out.println("question name:")+name);
    System.out.println("Answers....");
    Set<Entry<Answer, User>> set = answers.entrySet();
    Iterator<Entry<Answer, User>> itr = set.iterator();
    while(itr.hasNext()){
        Entry<Answer, User> entry = itr.next();
        Answer ans = entry.getKey();
        User user = entry.getValue();
        System.out.println("Answer Information:");
        System.out.println(ans);
        System.out.println("Posted By:");
        System.out.println(user);
    }
}
}

Answer.java

package com.w3codebox;
import java.util.Date;
public class Answer {
private int id;
private String answer;
private Date postedDate;
public Answer() {}
public Answer(int id, String answer, Date postedDate) {
    super();
    this.id = id;
    this.answer = answer;
    this.postedDate = postedDate;
}
public String toString(){
    return "Id:"+id+"Answer:"+answer+"Posted Date:"+postedDate;
}
}

User.java

package com.w3codebox;
public class User {
private int id;
private String name, email;
public User() {}
public User(int id, String name, String email) {
    super();
    this.id = id;
    this.name = name;
    this.email = email;
}
public String toString(){
    return "Id:"+id+"Name:"+name+"Email Id:"+email;
}
}

applicationContext.xml

entrada elemento del key-ref y value-ref Atributo utilizado para definir referencias a beans en el mapa.

<?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="answer" value="Java is a Programming Language"></property>
<property name="postedDate" value="12/12/2001></property>
</bean>
<bean id="answer2" class="com.w3codebox.Answer>
<property name="id" value="2></property>
<property name="answer" value="Java is a Platform"></property>
<property name="postedDate" value="12/12/2003></property>
</bean>
<bean id="user1" class="com.w3codebox.User>
<property name="id" value="1></property>
<property name="name" value="Arun Kumar"></property>
<property name="email" value="[email protected]"></property>
</bean>
<bean id="user2" class="com.w3codebox.User>
<property name="id" value="2></property>
<property name="name" value="Varun Kumar"></property>
<property name="email" value="[email protected]"></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">
<map>
<entry key-ref="answer1" value-ref="user1></entry>
<entry key-ref="answer2" value-ref="user2></entry>
</map>
</property>
</bean>
</beans>

Test.java

Esta clase obtiene el Bean desde el archivo applicationContext.xml y llama al método displayInfo() para mostrar información.

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();
    
}
}