я не думаю, что это возможно без Qualifier
я попытаюсь показать свои решения с помощью genericDAO, извините, если это немного подробно
Определение класса интерфейса и реализации
public interface GenericDAO<T, ID extends Serializable> (...)
public class GenericDAOImpl<T, ID extends Serializable>
implements GenericDAO<T, ID>
(...) important is this constructor
public GenericDAOImpl(Class<T> persistentClass) {
this.persistentClass = persistentClass;
}
определение Spring bean, обратите внимание на abstract="true"
<bean id="genericHibernateDAO" class="de.optimum24.av.pers.ext.hibernate.dao.GenericDAOImpl"
abstract="true">
<description>
<![CDATA[
Definition des GenericDAO.
]]>
</description>
<property name="sessionFactory" ref="sessionFactory" />
</bean>
Использование этого универсального DAO без специального класса реализации
<bean id="testHibernateChildDao" class="de.optimum24.av.pers.ext.hibernate.dao.GenericDAOImpl">
<property name="sessionFactory" ref="sessionFactory" />
<constructor-arg>
<value>de.optimum24.av.pers.test.hibernate.domain.TOChild</value>
</constructor-arg>
</bean>
обратите внимание на аргумент конструктора с конкретным классом, если вы работаете с аннотацией Spring, вам нужно сделать:
@Autowired
@Qualifier(value = "testHibernateChildDao")
private GenericDAO<TOChild, Integer> ToChildDAO;
различать различные версии genericDao Beans (обратите внимание на квалификатор с прямой ссылкой на имя Beanname)
Использование этого genericDAO со специальным классом реализации
Интерфейс и класс
public interface TestHibernateParentDAO extends GenericDAO<TOParent, Integer>{
void foo();
}
public class TestHibernateParentDAOImpl extends GenericDAOImpl<TOParent, Integer>
implements TestHibernateParentDAO {
@Override
public void foo() {
//* no-op */
}
}
Bean Definition, обратите внимание на "родительскую" ссылку на абстрактный genericDAO выше.
<bean id="testHibernateParentDao" class="de.optimum24.av.pers.test.hibernate.dao.TestHibernateParentDAOImpl"
parent="genericHibernateDAO" />
и использование с Spring Annotation
@Autowired
private TestHibernateParentDAO ToParentDAO;
person
Michael Pralow
schedule
04.02.2009