java - 按类型 : two @Repository with same name 进行 Spring 注入(inject)

标签 java spring dependency-injection repository

我有这对daos:

package com.company.project.model.requests.type;

@Repository("requestTypeDao")
public class RequestTypeDaoHibernate extends AbstractReadDao implements RequestTypeDao {

}

package com.company.project.model.support.type;

@Repository("requestTypeDao")
public class RequestTypeDaoHibernate extends AbstractReadDao implements RequestTypeDao {

}

我正在尝试将它们注入(inject)一些 XXXServiceImpl 类(绝不会在同一个类中),如下所示:

@Autowired
private RequestTypeDao requestTypeDao;

因为它们不是同一种类型,我希望 Spring 根据从 corect 包中导入的类型进行注入(inject)(从来没有从同一个包中导入两个 RequestTypeDao),但它显示错误:

Annotation-specified bean name 'requestTypeDao' for bean class [com.company.project.model.support.type.RequestTypeDaoHibernate] conflicts with existing, non-compatible bean definition of same name and class [com.company.project.model.requests.type.RequestTypeDaoHibernate]

在错误处你可以看到类是不一样的。我已经阅读了有关 @Qualifier 注释的信息,但我知道这意味着更改 @Repository 注释中写入的名称。我还认为 @Resource 或 @Inject 不是我要找的。

我们不介意最后改名,但我们想知道是否可以通过Spring进行真正的按类型注入(inject)。这是两个具有相同名称和不同类类型的存储库,并且包被注入(inject)不同的和不同的类(从不相同)。

最佳答案

其实这是不可能的。无法将两个同名的 bean 注册到 spring 中。您必须使用 @Qualifier 否则 spring 无法在运行时处理您想要的 bean。

您可以了解更多here

@Autowired
@Qualifier("personA")
private Person person;



@Autowired
@Qualifier("personB")
private com.blabla.myOtherPackage.Person person;

关于java - 按类型 : two @Repository with same name 进行 Spring 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32265539/

相关文章:

java - 如何在 Java 中比较字符串?

java - 无法从 Spring 应用程序连接到 mssql 服务器

java - 如何从一个Fragment导航到另一个Fragment?

c# - 是否保证多个 ninject 绑定(bind)保持其绑定(bind)顺序

java - Dagger 2 Component.Builder

java - recycleview 设置适配器中支持 v4 view.NestedScrollingChild2 时出错

java - 为什么基本的 spring 4 示例不能使用 Eclipse kepler 运行?

java - 使用 Spring 在 Hibernate 中处理 session

Java、Spring Boot、测试、entityManagerFactory

asp.net-mvc - 为什么MVC提供的Default AccountController中有2个构造函数?