当创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱。下面显示的是使用 @Qualifier 注释的一个示例。
1.这里是 Student.java 文件的内容:
1 package com.spring.chapter7; 2 3 public class Student { 4 public String getName() { 5 return name; 6 } 7 public void setName(String name) { 8 this.name = name; 9 } 10 public int getAge() { 11 return age; 12 } 13 public void setAge(int age) { 14 this.age = age; 15 } 16 private String name; 17 private int age; 18 19 20 21 }
2.这里是 Profile.java 文件的内容:
1 package com.spring.chapter7; 2 3 import java.util.List; 4 import java.util.Set; 5 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.beans.factory.annotation.Qualifier; 8 import org.springframework.beans.factory.annotation.Required; 9 10 11 12 public class Profile { 13 14 @Autowired 15 @Qualifier("Student") //这里的值就是bean的id,当我们改变此值跟随我们指定的bean进行注入 16 private Student student; 17 18 public void printName() { 19 System.out.println("age:"+student.getName()); 20 } 21 22 public void printAge() { 23 System.out.println("name:"+student.getAge()); 24 } 25 26 public Profile() { 27 System.out.println("--------构造方法------------"); 28 } 29 }
3.下面是 MainApp.java 文件的内容:
1 package com.spring.chapter7; 2 3 4 import java.util.List; 5 6 import org.springframework.context.ApplicationContext; 7 import org.springframework.context.support.AbstractApplicationContext; 8 import org.springframework.context.support.ClassPathXmlApplicationContext; 9 10 public class Main { 11 /** 12 * Spring @Qualifier 注解注入 13 * author: 14 * mail:2536201485@qq.com 15 * 时间: 16 */ 17 18 public static void main(String[] args) { 19 ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring_xml/spring.xml"); 20 Profile profile=(Profile)applicationContext.getBean("Profile"); 21 profile.printName(); 22 profile.printAge(); 23 24 25 } 26 27 }
4.下面配置文件 spring.xml 的示例:
1 <!-- @Qualifier 注解 --> 2 <bean id="Profile" class="com.spring.chapter7.Profile"> 3 </bean> 4 <bean id="Student" class="com.spring.chapter7.Student"> 5 <property name="name" value="张三"></property> 6 <property name="age" value="23"></property> 7 </bean> 8 9 <bean id="Student2" class="com.spring.chapter7.Student"> 10 <property name="name" value="李四"></property> 11 <property name="age" value="22"></property> 12 </bean>
运行结果:
--------构造方法------------
age:李四
name:22