如果容器中有一个以上匹配的Bean,则可以通过@Qualifier注解限定Bean的名称,看下面的例子:
定义一个Car接口:
package com.spring.service; public interface ICar { public String getCarName(); }
两个实现类BMWCar和BenzCar:
package com.spring.service.impl; import com.spring.service.ICar; public class BMWCar implements ICar{ public String getCarName(){ return "BMW car"; } }
package com.spring.service.impl; import com.spring.service.ICar; public class BenzCar implements ICar{ public String getCarName(){ return "Benz car"; } }
再写一个CarFactory,引用car(这里先不用@Qualifier注解):
package com.spring.model; import org.springframework.beans.factory.annotation.Autowired; import com.spring.service.ICar; public class CarFactory { @Autowired
@Qualifier("bmwCar") private ICar car; public String toString(){ return car.getCarName(); } }
配置文件:
<?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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd "> <context:component-scan base-package="com.spring" /> <!-- Autowired注解配合Qualifier注解 --> <bean id="carFactory" class="com.spring.model.CarFactory" /> <bean id="bmwCar" class="com.spring.service.impl.BMWCar" /> <bean id="benz" class="com.spring.service.impl.BenzCar" /> </beans>
测试方法:
/** * Autowired注解配合Qualifier注解 */ @Test public void test1(){ //读取配置文件 ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext2.xml"); CarFactory carFactory=(CarFactory) ctx.getBean("carFactory"); System.out.println(carFactory.toString()); }