博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Qualifier的使用
阅读量:6634 次
发布时间:2019-06-25

本文共 2378 字,大约阅读时间需要 7 分钟。

  hot3.png

摘要

spring 的 qualifier 平常使用一般直接是使用id 来限定,不过spring给我们提供了更强大的功能。

使用方法

直接使用

  • 直接在@Qualifier中限定bean的id
  • 在bean上使用@Qualifier来指定后续使用的value,然后在注入处使用指定的值

Example:

public interface OrderService {    String createOrder(String name);}@Component@Qualifier(value = "whatever")public class EmptyOrderService implements OrderService {    private Logger logger = LoggerFactory.getLogger(EmptyOrderService.class);    @Override    public String createOrder(String name) {        logger.info("empty order service " + name);        return "empty";    }}

自定义

@Qualifier 除了可以注解在类上,属性上,还可以注解在 annotation上,这样我们可以创造自己的qualifier(在xml里可以使用<qualifier>)。

Example: id 有时候不明确,我们需要按自己的条件来创造qualifier

@Target(value = {ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Inherited@Qualifier@Documentedpublic @interface OrderQualifier {    String orderName() default"default";    int orderType() default 0;}

然后就可以使用@OrderQualifier来指定和注入bean了。

@Component@OrderQualifier(orderName = "kill", orderType = 2)public class KillOrderService implements OrderService {    private Logger logger = LoggerFactory.getLogger(KillOrderService.class);    @Override    public String createOrder(String name) {        logger.info("kill order service " + name);        return "kill";    }}@Component@OrderQualifier(orderName = "normal", orderType = 1)public class NormalOrderService implements OrderService {    private Logger logger = LoggerFactory.getLogger(NormalOrderService.class);    @Override    public String createOrder(String name) {        logger.info("normal create order " + name);        return "normal";    }}

使用时直接注入:

@RestController@RequestMapping("order")public class OrderResource {    @Autowired    @OrderQualifier(orderName = "kill", orderType = 2)    OrderService orderService;    @Autowired    @OrderQualifier(orderName = "normal", orderType = 1)    OrderService normalOrderService;    @Autowired    @Qualifier("whatever")    OrderService emptyOrderService;    @GetMapping("kill")    public String print(String name) {        return orderService.createOrder(name);    }    @GetMapping("normal")    public String normal(String name) {        return normalOrderService.createOrder(name);    }    @GetMapping("empty")    public String empty(String name) {        return emptyOrderService.createOrder(name);    }}

测试一下,分别调用回返回了各自的值。

转载于:https://my.oschina.net/liufq/blog/2989080

你可能感兴趣的文章
Red Hat Linux 5.2 14T大文件系统 分区过程
查看>>
sql server2008 R2 各个版本的区别与选择
查看>>
Unity3D 游戏在 iOS 上因为 trampolines 闪退的原因与解决办法
查看>>
遍历 USB devcie,读取设备描述符 device descriptor【转】
查看>>
[JavaScript]自定义MessageBox
查看>>
JavaScript 拾碎[四] 使用JavaScript 实现父子窗体间的调用
查看>>
谈谈大数据存储与备份的核心——技术与创新
查看>>
Splunk日志服务器安装
查看>>
springmvc学习笔记--mybatis--使用插件自动生成实体和mapper
查看>>
2012安卓全球开发者大会
查看>>
AgileEAS.NET敏捷开发平台及案例下载(持续更新)-索引
查看>>
海量数据(数据量比较大时)的处理分析
查看>>
C#实现DateTime与byte[]相互转换
查看>>
提升ReSharper和Visual Studio的性能
查看>>
香菇炖鸡汤
查看>>
阿里云前端周刊 - 第 39 期
查看>>
Flume的Agent
查看>>
iOS开发-NSURLSession详解
查看>>
浅谈linux的死锁检测 【转】
查看>>
SharePoint\O365 CSOM操作"请求访问设置"功能
查看>>