是否使用@autowired自动检测?使用@qualifier时是否按名称进行依赖注入?我们如何使用这些注释进行setter和constructor注入?
您可以将@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
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