栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring - @Qualifier 学习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring - @Qualifier 学习

@Qualifier 学习

官方解释:

 This annotation may be used on a field or parameter as a qualifier for 
 candidate beans when autowiring. It may also be used to annotate other
 custom annotations that can then in turn be used as qualifiers.

简单的理解就是:
(1)在使用@Autowire自动注入的时候,加上@Qualifier(“test”)可以指定注入哪个对象;
(2)可以作为筛选的限定符,我们在做自定义注解时可以在其定义上增加@Qualifier,用来筛选需要的对象。

使用方式1

指定name,注入特定name的对象
使用步骤:
(1)注册bean对象,添加bean对象注入时的名称name
(2)自动注入bean对象时,添加@Qualifier注解筛选出指定name的bean对象

@Autowired和@Qualifier这两个注解的连用在这个位置就类似@Resource(name=“testClass1”)

@Configuration
public class TestConfiguration {

   @Bean("testClass1")
   TestClass testClass1(){
       return new TestClass("TestClass1");
   }

   @Bean("testClass2")
   TestClass testClass2(){
       return new TestClass("TestClass2");
   }

}

@RestController
public class TestController {

    //此时这两个注解的连用就类似 @Resource(name="testClass1")
    @Autowired
    @Qualifier("testClass1")
    private TestClass testClass;

    @GetMapping("/test")
    public Object test(){
        return testClassList;
    }

}
使用方式2

用于标记筛选增加了@Qualifier注解的对象
使用步骤:
(1)注册bean对象的时候添加@Qualifier注解,进行标记
(2)自动注入bean对象时,添加@Qualifier注解筛选出标记的bean对象

@Configuration
public class TestConfiguration {

	// 我们调整下在testClass1上增加@Qualifier注解
	@Qualifier
	@Bean("testClass1")
	TestClass testClass1() {
		return new TestClass("TestClass1");
	}

	@Bean("testClass2")
	TestClass testClass2() {
		return new TestClass("TestClass2");
	}
}

@RestController
public class TestController {

    // 1. 我们这里使用一个list去接收testClass的对象
    @Autowired
    List testClassList= Collections.emptyList();

    @GetMapping("/test")
    public Object test(){
    	// 结果有两个 [{"name":"TestClass1"},{"name":"TestClass2"}]
        return testClassList;
    }

	// 2. 我们在这增加注解
    @Qualifier 
    @Autowired
    List testClassList2= Collections.emptyList();

    @GetMapping("/test2")
    public Object test2(){
    	// 结果只有TestClass1 [{"name":"TestClass1"}]
        return testClassList;
    }
}

另外,@Qualifier注解是可以指定value的,可以通过values来分类筛选想要的对象了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/919093.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号