Hi guys, I created a simple web application using hibernate and spring, and I want to implement an abstract class containing crud operations, but I have this error:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientService' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'clientDao' while setting bean property 'clientDao'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'clientDao' defined in class path resource [applicationContext.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.lang.Class]:
GenericDao
public interface GenericDao<T, ID extends Serializable> { T save(T entity); T update(T entity); void delete(T entity); T findById(ID id); List<T> findAll(); void flush();
}
GenericDaoImpl
@Transactional public class GenericDaoImpl<T, ID extends Serializable> implements GenericDao<T, ID> { @Autowired SessionFactory sessionFactory ; private Class<T> persistentClass; public GenericDaoImpl() { super(); } public GenericDaoImpl(Class<T> persistentClass) { super(); this.persistentClass = persistentClass; } @Transactional public T save(T entity) { this.sessionFactory.getCurrentSession().save(entity); return null; } @Transactional public T update(T entity) { this.sessionFactory.getCurrentSession().update(entity); return null; } @Transactional public void delete(T entity) { this.sessionFactory.getCurrentSession().delete(entity); } @SuppressWarnings("unchecked") @Transactional public T findById(ID id) { return (T) this.sessionFactory.getCurrentSession().load(this.getPersistentClass(), id); } @SuppressWarnings("unchecked") @Transactional public List<T> findAll() { return this.sessionFactory.getCurrentSession().createQuery("* from"+this.getPersistentClass().getSimpleName()).list(); } @Transactional public void flush() { this.sessionFactory.getCurrentSession().flush(); } public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public Class<T> getPersistentClass() { return persistentClass; } public void setPersistentClass(Class<T> persistentClass) { this.persistentClass = persistentClass; } }
ClientDao
public interface ClientDao extends GenericDao<Client,Integer> { }
ClientDaoImpl
@Transactional @Repository("clientDao") public class ClientDaoImpl extends GenericDaoImpl<Client,Integer> implements ClientDao { public ClientDaoImpl(Class<Client> persistentClass) { super(persistentClass); }
application context.xml
<bean id="client" class="com.webapp.model.Client"/> <bean id="genericDao" class="com.webapp.dao.GenericDaoImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="clientDao" class="com.webapp.dao.ClientDaoImpl" parent="genericDao"> <constructor-arg ref="client" /> </bean> <bean id="clientService" class="com.webapp.service.ClientServiceImpl"> <property name="clientDao" ref="clientDao" /> </bean>
source share