当我们在spring整合hibernate时候需要注入一个SessionFactory又因为每个dao都必须要注入这个对象所以我把提出一个dao父类出来在里面使用spring注解的方法注入一个SessionFactory对象,这个整个项目就只需要写一个注入
public abstract class BaseDaoImpl<E extends Serializable, PK extends Serializable>
extends HibernateDaoSupport implements BaseDao<E, PK> { /**
 * 实体类的类型
 */
private Class<?> entityClass; /**
 * 
 * @return 泛型的类型
 */
public Class<?> getEntityClass() {
return entityClass;
} private SessionFactory localSessionFactory; /**
 * 
 * @param factory
 */
@Resource(name = "sessionFactory")
public void setLocalSessionFactory(Object sessionFactory) {
try {
System.out.println("--------------"+sessionFactory.getClass());
/*
 * this.localSessionFactory = sessionFactory;
 * System.out.println(localSessionFactory);
 * setSessionFactory(localSessionFactory);  */
System.out.println("success..........................");
} catch (Exception e) {
e.printStackTrace();
}
}
}
这个类继承了HibernateDaoSupport我写了一个LocalSessionFactory方法使用@Resource(name="sessionFactory")
这个注入sessionFactory但是出现了bugCaused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dicitonaryDao' defined in file [G:\erp\erp\web\WEB-INF\system\spring-system.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required原来我把LocalSessionFactory的类型定义为LocalSessionFactoryBean
然后使用getObject()方法强转在调用HibernateDaoSupport的setSessionFactory方法注入SessionFactory,不行
请高手指教

解决方案 »

  1.   

    dicitonaryDao继承BaseDaoImpl
    是否注入sessionFactory
    或者是否设置了parent
      

  2.   

    你再看看JAVA的设计模式方面的资料,可能会对你有所帮助,SessionFactory 是工厂类,用来生产产品的,你那样处理就不符合设计模式的设想了,所以也就没有意义了
      

  3.   

    你的配置问题有问题。
    在dao中'dicitonaryDao' 这个对象的注入方法,你检查一下,。
      

  4.   

    怎么还搞出来个Object类型啊,sessionFactory类型就可以了
    建议你最好别继承HibernateDaoSupport,如果继承了的话,有一套专门的配置, 不用你自己去实现的
      

  5.   

    'dicitonaryDao' 
    创建失败。