Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring injection by type: two @Repository with same name

I have this pair of 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 {

}

and I'm trying to inject them in some XXXServiceImpl classes (never both in the same class) like this:

@Autowired
private RequestTypeDao requestTypeDao;

Because they are not the same type, I was expecting Spring to inject based on the imported type from the corect package (there are never imported two RequestTypeDao from the same package), but it shows an error:

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]

At the error you can see the class is not the same. I have read about the @Qualifier annotation but I understand it would imply changing the name in written in the @Repository annotation. I also think that @Resource or @Inject are not what I looking for.

We don't mind changing names in the end, but we want to know if real injection by type can be made through Spring. This is two repositories with same name and different class types and packages being injected in distinct and different classes (never the same one).

like image 842
madtyn Avatar asked Sep 01 '25 16:09

madtyn


1 Answers

Actually this is impossible. There's no way to register two same named beans into the spring. You have to use @Qualifier Otherwise spring can't handle which bean you want in the runtime.

You can learn more here

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



@Autowired
@Qualifier("personB")
private com.blabla.myOtherPackage.Person person;
like image 174
Sercan Ozdemir Avatar answered Sep 04 '25 08:09

Sercan Ozdemir