1、在Spring+Hibernate里,我见别人写*DAO类时都直接或间接继承HibernateDAOSupport类,然后使用它的getHibernateTemplate()方法。我看了HibernateDAOSupport类,看到这个方法只是简单的返回hibernateTemplate,
public final HibernateTemplate getHibernateTemplate() {
  return this.hibernateTemplate;
}
而构造方法里也没有设置hibernateTemplate,我想应该返回空值,我在*DAO类里直接测试时也是返回空值。
疑问:是不是你们在get之前都set了一下,或者是spring自动从配置文件中获得(如果是这样,它又是怎么获得的)?2、在applicationConfig.xml文件中,我们定义*DAO的bean时,都要加上sessionFactory的Property,而*DAO里和继承的HibernateDAOSupport里都没有这个属性,只有hibernateTemplate属性。
疑问:为什么要设置sessionFactory?
Spring读取配置的机制又是什么呢?

解决方案 »

  1.   

    1.自己编写DAO extends HibernateDAOSupport,在applicationContext.xml中setSessionFactory给实现类,实现类实例化sessionFactory后可以调用其他方法。
    2.请查看hibernateDAOSupport的父类
      

  2.   

    spring 里面的配置:<bean id="hibernateTemplate"
    class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory" ref="sessionFactory" />
    </bean>“我见别人写*DAO类时都直接或间接继承HibernateDAOSupport类”这里是使用了opensessioninview的策略,建议楼主学习下。
      

  3.   

    应该是 HibernateDaoSupport 在内部通过 sessionFactory 属性设置的 hibernateTemplate 你仔细看看 HibernateDaoSupport 类
      

  4.   

    org.springframework.crm.hibernate3.support.HibernateDaoSupport extends org.springframework.dao.support.DaoSupport在Hibernate中最主要的接口就是:org.hibernate.Session。它提供了访问和操作数据库的能力(包括save, update, delete, 和 load Object)。而获得Session对象的途径是通过调用SessionFactory的方法。SessionFactory的作用是创建、关闭、管理Session对象。所以,需要在Spring中首先配置出SessionFactory Bean。Spring 读XML 好象用的是 DOM?
      

  5.   

    首搞清楚spring的IOC容器是拿干什么的,为什么要使用它,他的强大在哪
      

  6.   

    spring 是通过依赖注入
      

  7.   

    1、spring通过依赖注入,需通过AppicationContext获取该bean,运行成功。
    2、尚不明。