日期:2014-05-19  浏览次数:20705 次

HibernateDaoSupport疑惑
我现在有一个类 
public  class GenericDaoHibernateImpl<T, PK extends Serializable> extends HibernateDaoSupport implements GenericDao<T, PK> {


但是我配置文件 没有xml配置  GenericDaoHibernateImpl,给他注入 HibernateTemplate ,

也没有注入 sessionfctory

------------

然后GenericDaoHibernateImpl这个类里面也没有 注解 

setSuperHibernateTemplate  或者 setSupersessionfctory 之类

---------------

但是 我就疑惑了 ,他还能 用 getHibernateTemplate里面的模板方法


请教高人 HibernateTemplate是如何注入的 

ps:HibernateDaoSupport 是抽象的,里面的两个set是final的 我知道

-------------------------

GenericDaoHibernateImpl 有这个方法

private Class<T> type;//实体类类型,(由构造方法自动赋值)
public GenericDaoHibernateImpl(Class<T> type) {
this.type = type;
}


---

public class TSysPostDaoHibernateImpl extends
GenericDaoHibernateImpl<TSysPost, Long> implements ITSysPostDao {
public TSysPostDaoHibernateImpl(Class<TSysPost> post) {
super(post);
}
}


TSysPostDaoHibernateImpl 是子类


------解决方案--------------------
当你继承了hibernatedaosupport类后,对于子类可以直接用到父类的excute(CURD)方法,这样就会减轻很多程序员的工作。
------解决方案--------------------
我看清楚你的意思了,如果你没有注入sessionFactory的话是会报错的

/*注入属性sessionFactory,这个属性在HibernateDaoSupport类中*/
@Autowired
public void setSuperSessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}

这个没有的话会报以下的错
Error creating bean with name 'usersDao' defined in file [C:\Users\user\Workspaces\MyEclipse 8.5 M2\sshTest\WebRoot\WEB-INF\classes\com\bbx\dao\impl\UsersDaoImpl.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required

------解决方案--------------------
这个类注入HibernateTemplate 和sessionFactory都行