@Primary 当有两个带有注解的类,同时实现同一个接口的时候,spring 根据类型无法选择到底注入哪一个,这个时候,你就需要加上@Primary注解来作为唯一标识,可以优先选择哪一个具体的实现,如下代码想要优选选择ColorA,就在A类上加上@Primary,则测试打印出来pink
@Qualifier 同样,方法上加上@Qualifier注解,@Primary和@Qualifier同时使用是,优先以@Qualifier为主,测试打印出来red
/**
* @author zss
*/
public interface Color {
/**
* getColor
*
* @return
*/
String getColor();
}
/**
* @author zss
*/
@Component
@Qualifier("ColorA")
@Primary
public class ColorA implements Color {
@Override
public String getColor() {
return "pink";
}
}
/**
* @author zss
*/
@Component
@Qualifier("ColorB")
public class ColorB implements Color {
@Override
public String getColor() {
return "red";
}
}
@Slf4j
public class primaryQualifierTest extends BaseTest {
@Qualifier("ColorB")
@Autowired
Color color;
@Test
public void getColorTest() {
System.out.println("获得颜色:" + color.getColor());
}
}