Chinaunix首页 | 论坛 | 博客
  • 博客访问: 351855
  • 博文数量: 51
  • 博客积分: 2011
  • 博客等级: 大尉
  • 技术积分: 613
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-06 17:19
文章分类

全部博文(51)

文章存档

2011年(1)

2010年(3)

2009年(27)

2008年(20)

我的朋友

分类:

2009-09-26 17:30:43

初学Spring,在Spring中整合Hibernate时,遇到如下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'BookDAO' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: sessionFactory or hibernateTemplate is required

我在程序中定义了一个BookDAO类,继承了HibernateDaoSupport,以利用HibernateTemplate来进行对数据库数据的增删修查的操作。

public class BookDAO extends HibernateDaoSupport ...{
    
    
public void addBook(Book book)...{
         getHibernateTemplate().save(book);
         getHibernateTemplate().flush();
     }

    
    
public void delBook(Book book)...{
         getHibernateTemplate().delete(book);
         getHibernateTemplate().flush();
     }

    
    
public void update(Book book)...{
         getHibernateTemplate().update(book);
         getHibernateTemplate().flush();
     }

    
    
public Book getBook(long oid)...{
        
return (Book)getHibernateTemplate().get(Book.class, oid);
        
     }

    
}

另外,我定义了一个类BookSrv,其依赖于BookDAO,并利用Setter Injection的依赖注入方式,注入BookDAO的对象。

public class BookSrv ...{
    
    
private BookDAO bdao=null;

    
public void setBdao(BookDAO bdao) ...{
        
this.bdao = bdao;
     }

    
    
public void add(Book book)...{
         bdao.addBook(book);
     }

    
    
public void del(Book book)...{
         bdao.delBook(book);
     }

    
    
public void update(Book book)...{
         bdao.update(book);
     }

    
public Book get(long oid)...{
        
return bdao.getBook(oid);
     }

}

我原先的错误的配置文件如下(省略其他部分):

<bean id="BookDAO" class="dao.BookDAO">
bean>
    
<bean id="BookSrv" class="srv.BookSrv">
           
<property name="bdao" ref="BookDAO">property>
bean>

想了很久,也找不出异常地原因。而且被那一句sessionFactory or hibernateTemplate is required所害,一直在dataSource、sessionFactory、hibernateTemplate的配置上苦苦地追寻着错误所在。

其实早该发现问题地所在:BeanCreationException: Error creating bean with name 'BookDAO' ……

因为BookDAO继承了HibernateDaoSupport,并利用HibernateDaoSupport的getHibernateTemplate()得到一个HibernateTemplate的对象,然后再调用这个对象的save()、flush()等方法。所以,BookDAO依赖于HibernateTemplate。

于是,在配置文件中加上BookDAO对HibernateTemplate的依赖即可解决问题。

正确的配置文件为:

    <bean id="BookDAO" class="dao.BookDAO">
        
<property name="hibernateTemplate" ref="hibernateTemplate">property>
    
bean>
    
    
<bean id="BookSrv" class="srv.BookSrv">
        
<property name="bdao" ref="BookDAO">property>
    
bean>
阅读(1227) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~