想学学spring的注解,但是dao类继承HibernateDaoSupport后报错,需要sessionFactory或者hibernateTemplet,怎么解决呢?
spring配置<!-- 定义数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!-- 定义sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 设置hibernate属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<!-- 读取指定目录下的hibernate映射文件 -->
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/com.ssh.onlinetest.*.model</value>
</list>
</property>
</bean>
<!-- 使用hibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 定义基于hibernate的事物管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="txManager" />
<!-- 使用注解,在beans标签中添加context命名空间及其对应的schemaLocation -->
<context:annotation-config/>
<context:component-scan base-package="com.ssh.onlinetest.*"/>
<!-- 定义事物切面 -->
<aop:config>
<aop:pointcut expression="execution(* com.ailk.tangqiang3..*.*(..))" id="txPointCut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
<!-- 定义事物建议,即事物处理逻辑 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="mod*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
dao类定义:@Component("userDAO")
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
spring配置<!-- 定义数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!-- 定义sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 设置hibernate属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<!-- 读取指定目录下的hibernate映射文件 -->
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/com.ssh.onlinetest.*.model</value>
</list>
</property>
</bean>
<!-- 使用hibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 定义基于hibernate的事物管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="txManager" />
<!-- 使用注解,在beans标签中添加context命名空间及其对应的schemaLocation -->
<context:annotation-config/>
<context:component-scan base-package="com.ssh.onlinetest.*"/>
<!-- 定义事物切面 -->
<aop:config>
<aop:pointcut expression="execution(* com.ailk.tangqiang3..*.*(..))" id="txPointCut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
<!-- 定义事物建议,即事物处理逻辑 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="mod*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
dao类定义:@Component("userDAO")
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
@Resource(name="sessionFactory")
public void setSuperSessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
public class BaseDao extends HibernateDaoSupport{
private SessionFactory sessionFactory;
//set,get方法
//然后把这个类要么使用spring的注解标识为一个bean组件,或者将这个BaseDao配置在xml文件里,以后每次直接继承这个类就okay了,不会空指针的。
public Object findById(){}//
public Page findByPage(){}//封装一些常用的工具类
}
结贴了,这一块已经弄好了。谢谢各位的回答。