当前位置: 首页 > 知识库问答 >
问题:

Spring@Autowired和@Qualifier[closed]

黄丰
2023-03-14

是否使用@autowired自动检测?使用@qualifier时是否按名称进行依赖注入?我们如何使用这些注释进行setter和constructor注入?

共有1个答案

段干俊茂
2023-03-14

您可以将@qualifier@autowired一起使用。事实上,如果发现不明确的bean类型,spring会要求您显式地选择bean,在这种情况下,您应该提供限定符

例如,在以下情况下,有必要提供一个限定符

@Component
@Qualifier("staff") 
public Staff implements Person {}

@Component
@Qualifier("employee") 
public Manager implements Person {}


@Component
public Payroll {

    private Person person;

    @Autowired
    public Payroll(@Qualifier("employee") Person person){
          this.person = person;
    }

}

编辑:

@Component
@Qualifier("staff") 
public Staff implements Person {}

@Component
@Qualifier("employee") 
public Manager implements Person {}


@Component
@RequiredArgsConstructor
public Payroll {
   @Qualifier("employee") private final Person person;
}
# Copy the Qualifier annotation from the instance variables to the constructor
# see https://github.com/rzwitserloot/lombok/issues/745
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier
    null
public Payroll {
   @Autowired @Qualifier("employee") private final Person person;
}
public Payroll {
   private final Person person;
   @Autowired
   @Qualifier("employee")
   public void setPerson(Person person) {
     this.person = person;
   } 
}

如果您使用的是构造函数注入,那么注释应该放在构造函数上,否则代码将无法工作。像下面这样使用-

public Payroll {

    private Person person;

    @Autowired
    public Payroll(@Qualifier("employee") Person person){
          this.person = person;
    }

}
 类似资料:
  • 问题内容: 是否通过@Autowired自动检测到?使用@Qualifier时是否按名称进行依赖项注入?我们如何使用这些批注进行setter和构造函数注入? 问题答案: 你可以与一起使用。实际上,如果发现模棱两可的bean类型,spring会询问你是否明确选择了bean,在这种情况下,你应该提供限定符 例如在以下情况下,有必要提供一个限定词 编辑: 在Lombok 1.18.4中,最终可以避免使用

  • 问题内容: 因此,如果我理解正确的话,两种方法都是在有多个候选对象的情况下确定要自动装配哪个bean的方法。那么到底有什么区别呢? 问题答案: 读取为“默认”。 如果一个Bean 没有 任何Bean ,并且存在多个该类型的Bean,则将选择标记的候选Bean ,即,当没有其他可用信息(即丢失)时,它是默认选择。 一个好的用例是,最初您只有一个类型的bean,因此没有使用任何代码。然后,当您添加另一

  • 我发现了一个问题,当使用@Enable缓存批注与@Inject/@autoweld在@Configuration类: 复制的简单示例: 配置类: 应用程序上下文启动器: 错误: 引起原因:org.springframework.beans.factory.Bean定义存储异常:工厂方法[公共org.springframework.cache.CacheManagerspring.samples.c

  • 我正在尝试向现有项目引入一个新bean 当前bean是 我正在尝试添加新的Bean到 从我想访问数据,在后期构造中,我想注册。所以我想调用方法 所有这些包都打包为jar和Spring上下文xml 但在部署期间,我得到了关于处于create状态的bean的异常 我还尝试删除@Autowired并使用获取对象。但我也犯了同样的错误。 如果我从xml文件中删除bean条目,它会得到正确的部署,但是pos

  • 我刚开始使用spring boot,现在遇到了一个问题。 我有一个有3层的应用程序,控制器,服务和存储库。控制器调用服务,服务然后使用存储库中的类返回正确的数据(在需要时做了逻辑魔术之后)。我还使用Hibernate和H2 inmemory来简化SQL连接,但是出于测试目的,我希望在另一个存储库类中有硬编码的数据和方法。我的控制器通过服务使用H2 inmem数据源,而我的测试类使用硬编码的数据源。

  • 当您创建多个相同类型的bean并且只想使用属性连接其中一个bean时,可能会出现这种情况。 在这种情况下,您可以使用@Qualifier注释和@Autowired通过指定要连接的确切bean来消除混淆。 以下是显示@Qualifier注释使用的示例。 例子 (Example) 让我们有一个可用的Eclipse IDE,并按照以下步骤创建一个Spring应用程序 - 脚步 描述 1 创建一个名为Sp