@Qualifier 注解作用就是为了给Bean打上一个标记,用来查找bean,代码示例:

- 创建一个java bean
package com.gupaoedu.springcloud.example.demo;public class TestClass {private String name; // getter setter 略
}
- 编写配置类,将这个bean装载到IOC容器
package com.gupaoedu.springcloud.example.demo;import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TestConfiguration {@Bean("testClass1")TestClass testClass1(){return new TestClass("TestClass1");}@Qualifier@Bean("testClass2")TestClass testClass2(){return new TestClass("TestClass2");}
}
- 启动类,配置扫描包
package com.gupaoedu.springcloud.example.springclouduserservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;@ComponentScan(basePackages = "com.gupaoedu")
@SpringBootApplication
public class SpringCloudUserServiceApplication {public static void main(String[] args) {SpringApplication.run(SpringCloudUserServiceApplication.class, args);}
}
- 测试controller 对testClassList 加上@Qualifier注解
package com.gupaoedu.springcloud.example.demo;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Collections;
import java.util.List;
@RestController
public class TestController {@Qualifier@AutowiredList<TestClass> testClassList= Collections.emptyList();@GetMapping("/test")public Object test(){return testClassList;}}
然后启动,访问/test, 看到只打印了 TestClass2

然后对testClass1 Bean的注入,也加上@Qualifier注解后再请求/test
@Qualifier
@Bean("testClass1")TestClass testClass1(){return new TestClass("TestClass1");}
结果如下,可以看到,只有加了@Qualifier标记的Bean, 才会被注入给同样加了@Qualifier标记的 testClassList 这个list中

注: 本文是为了给ribbon负载均衡原理中, @LoadBalanced注解实现负载均衡的原理做铺垫;

















