@Qualifier注解用来指定自动注入时合作bean需要满足的qualifier的名称,如果一个bean没有指定qualifier属性,则用它的id为qualifier,来给别的bean提供注入。
示例
package cn.edu.tju.domain;public class MovieCatalog {
}
package cn.edu.tju.domain;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;public class MovieRecommender {@Autowired@Qualifier("secondary")private MovieCatalog movieCatalog;}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:annotation-config/><bean id = "main" class="cn.edu.tju.domain.MovieCatalog"><qualifier value="secondary"/></bean><bean id="recommender" class="cn.edu.tju.domain.MovieRecommender"></bean></beans>
package cn.edu.tju.test;import cn.edu.tju.domain.People;
import cn.edu.tju.domain.Person;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.sql.SQLException;public class Test09 {public static void main(String[] args) throws Exception {ConfigurableApplicationContext ctx = newClassPathXmlApplicationContext("spring9.xml");}
}
##########################################################
package cn.edu.tju.domain;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;public class MovieRecommender2 {private MovieCatalog movieCatalog;public MovieCatalog getMovieCatalog() {return movieCatalog;}public void setMovieCatalog(MovieCatalog movieCatalog) {this.movieCatalog = movieCatalog;}@Autowiredpublic void prepare(@Qualifier("secondary") MovieCatalog movieCatalog) {this.movieCatalog = movieCatalog;}}