我开发了一个GenericDAO
具有两种通用类型的接口,即实体和主键类型:
public interface GenericDAO<E, PK extends Serializable> {
PK save(E newInstance);
void update(E transientObject);
//typical dao methods
}
然后我在hibernate 4中为它们提供了一个实现:
@Transactional
@Component
@Repository
public abstract class GenericDAOHibernate4<E, PK extends Serializable> implements GenericDAO<E, PK> {
public PK save(E newInstance) {
return (PK) factory.getCurrentSession().save(newInstance);
}
public E findById(PK id) {
return (E) factory.getCurrentSession().get(getEntityClass(), id);
}
//method implementations
}
然后我只需要创建扩展这个抽象类的具体类:
@Component
@Transactional
@Repository
@Qualifier("userDAO")
public class UserDAO extends GenericDAOHibernate4<User, Long> {
@Autowired
public UserDAO(SessionFactory factory) {
super(factory);
}
@Override
protected Class<User> getEntityClass() {
return User.class;
}
}
然后我在需要时以这种方式注入具体的 DAO:
public class UserService extends GenericService<User> {
@Autowired
public UserService(@Qualifier("userDAO") GenericDAO<User, Long> dao) {
super(dao);
}
但是,如果我需要向具体的 dao 添加另一个方法,从而注入具体的类,spring 找不到依赖项。这在启动时失败:
public class UserService extends GenericService<User> {
@Autowired
public UserService(@Qualifier("userDAO") UserDAO dao) {
super(dao);
}
出现此错误:
无法实例化 bean 类 [ddol.rtdb.services.UserService]:未找到默认构造函数;嵌套异常是 java.lang.NoSuchMethodException: ddol.rtdb.services.UserService.()
我应该如何注入它?