2016-04-23 84 views
0

我是Spring的新手,试图实现本文中的Generic DAO http://www.ibm.com/developerworks/library/j-genericdao/。我有几个实体 - ConcreteEntity1和ConcreteEntity2。另外,我有类使用构造函数自动装配泛型类型[Spring 4.2.5]

public interface GenericDao<T extends Serializable> { 
    public T get(long id); 
    public List<T> get(String hql); 
    public void remove(T persistentObject); 
    public void add(T entity); 
} 

@Repository("hibGenericDao") 
public class HibGenericDaoImpl<T extends Serializable> implements GenericDao<T> { 

    @Autowired 
    private SessionFactory sessionFactory; 

    private Class<T> type; 

    public HibGenericDaoImpl(Class<T> type) { 
     this.type = type; 
    } 

    /** {@inheritDoc} */ 
    @Override 
    public T get(long id) { 
     T entity; 
     try (Session session = sessionFactory.getCurrentSession()) { 
      entity = session.get(type, id); 
     } 
     return entity; 
    } 

    /** {@inheritDoc} */ 
    @Override 
    public List<T> get(String hql) { 
     List<T> entityList; 
     try (Session session = sessionFactory.getCurrentSession()) { 
      Query query = session.createQuery(hql); 
      entityList = query.list(); 
     } 
     return entityList; 
    } 

    /** {@inheritDoc} */ 
    @Override 
    public void remove(T persistentObject) { 
     try (Session session = sessionFactory.getCurrentSession()) { 
      session.delete(persistentObject); 
     } 
    } 

    /** {@inheritDoc} */ 
    @Override 
    public void add(T entity) { 
     try (Session session = sessionFactory.getCurrentSession()) { 
      session.saveOrUpdate(entity); 
     } 
    } 
} 

现在我想写服务层,我想自动装配HibGenericDaoImpl<ConcreteEntity1>哪里场type包含ConcreteEntity1.class。你能说一下如何在没有XML的情况下执行它吗?

回答

0

用零参数构造函数替换您的构造函数。然后你可以使用this link得到T类型的反射。

相关问题