异常:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'articleServiceImpl' defined in file
[D:\My Documents\zzcms\zzcms\WebRoot\WEB-INF\classes\com\zzcms\article\service\impl\ArticleServiceImpl.class]: Invocation of init method failed;
nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
我的结构是ArticleServiceImpl继承DaoSupport(自己写的实现类), DaoSupport 继承 HibernateDaoSupport.
因为HibernateDaoSupport里需要用到SessionFactory, 因此, DaoSupport (自己写的实现类)中必须注入一个SessionFactory。
之前我是在applicationContext.xml中配置的,如下:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="packagesToScan"> <list> <value>com.zzcms.article.entity</value> </list> </property> </bean> <!-- 下面这段代码 --> <bean id="daoSupoort" class="com.zzcms.dao.base.DaoSupport"> <property name="sessionFactory" ref="sessionFancory"/> </bean>
上面的配置就把SessionFactory注入进去了。
现在我使用的是注解, DaoSupport中需要这样才能成功注入SessionFactory
@Transactional//具有默认的事务行为
public abstract class DaoSupport extends HibernateDaoSupport implements DAO {
/**
* - 【注入 SessionFactory】
* - 注入一个sessionFactory属性,并注入到父类(HibernateDaoSupport )里
* **/
private SessionFactory sessionFacotry;
//注入一个bean, 默认(name = "sessionFactory"), 因此只写@Resource
@Resource
public void setSessionFacotry(SessionFactory sessionFacotry) {
super.setSessionFactory(sessionFacotry);
}
//省略非重点代码...
}
================================The End========================================