@Qualifier

@Qualifier

概念

@Qualifier 注解位于javax.inject包下(Java EE标准,也存在于Spring框架的org.springframework.beans.factory.annotation包中作为同名注解,功能相同)。

它是一个限定符注解,用于解决当有多个相同类型的Bean候选者时,精确指定应该注入哪一个Bean的问题。与基于类型的自动装配(如@Autowired)结合使用时,它提供了额外的语义来消除歧义。

通俗说法

想象你去超市买苹果,但超市有两种苹果:红苹果和青苹果。

如果你只是说“给我一个苹果”,售货员就不知道你要哪种。

这时,你如果说“给我一个红苹果”,就明确了你的选择。

@Qualifier 就像你指定要“红苹果”一样,告诉Spring你要注入的具体是哪个Bean。

所属

Java EE标准:javax.inject.Qualifier

Spring框架:org.springframework.beans.factory.annotation.Qualifier

作用

  • 解决依赖注入时的多Bean冲突问题,即当一个接口有多个实现类时,精确指定注入哪一个实现。
  • 提供更细粒度的控制,允许开发者基于名字或者其他逻辑来区分Bean。

用法

  • @Autowired 或其他依赖注入注解一起使用,在需要注入的地方标注。
  • 通常与自定义的限定符注解(继承自 @Qualifier )结合,提供更有意义的名字区分。

使用场景

  • 当一个接口有多个实现类,并且需要根据具体情境注入不同的实现时。
  • 当需要依赖注入的Bean不是唯一匹配时,需要进一步明确指定。

使用示例

假设有一个接口 MessageService 和两个实现类 EmailServiceSmsService

public interface MessageService {}

@Service("emailService")
public class EmailServiceImpl implements MessageService {}

@Service("smsService")
public class SmsServiceImpl implements MessageService {}

在需要注入的地方,使用 @Autowired@Qualifier 来指定确切的Bean:

@Controller
public class MessageController {
    // 使用@Qualifier指定注入名为'emailService'的Bean
    @Autowired
    @Qualifier("emailService")
    private MessageService messageService;
}

在这个例子中,尽管 MessageService 接口有多个实现,通过 @Qualifier("emailService"),我们明确告诉Spring容器应该注入 EmailServiceImpl 实例。

版权声明:本文《@Qualifier》是由陶其原创撰写,首发于陶其的个人博客
转载声明:如需转载本文,请务必在转载处保留原文链接:https://www.tqazy.com/?p=113,并明确注明文章来源。
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇