superDAO 中注入了hibernateTemplate,然后blogDAOImpl继承superDAO,使用hibernateTemplate时报空
请教各位高手!(我在supDAO中 setHibernateTempla中打印,出一句话,确定hibernateTemplate是注入了)
为什么这样的?????
请教各位高手!(我在supDAO中 setHibernateTempla中打印,出一句话,确定hibernateTemplate是注入了)
为什么这样的?????
解决方案 »
- java 如何比较出离今天最近的日期 救急..谢谢
- spring注入不成功,报错nullpoint
- Tomcat + SQL出问题~急
- 无法注入sessionfaction
- Struts Action 的setServlet() 方法是自动运行的吗?
- hibernate 3.0 中还有dynamic-insert吗
- j2ee支持存储过程吗?
- 看了struts中的struts-example.war后.........
- 怎么分子模块配置多个struts-config文件?
- 请大家帮我看看这个奇怪的问题!
- hibernate annotation 继承 外键
- 急急急!! ssh框架 添加数据运行无问题 事物提交 但数据库无数据
import org.springframework.stereotype.Component;@Component
public class SuperDao {
HibernateTemplate hibernateTemplate; public HibernateTemplate getHibernateTemplate() {
// System.out.println("get:hibernateTemplate");
return hibernateTemplate;
}
@Resource
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
// System.out.println("set hibernateTemplate");
this.hibernateTemplate = hibernateTemplate;
}
}
public class BlogDAOImpl extends SuperDAO implements BlogDAO { public BlogDAOImpl(){
System.out.println("blogDAOimpl::::::");
}
@Override
public void save(Blog blog) {
// System.out.println("dao l ");
// System.out.println("dao L d :"+blog.getBlogAbstract());
// System.out.println("hT:"+hibernateTemplate);
List<Blog> list=null;
try {
list = (List<Blog>) hibernateTemplate.find("from Blog");
} catch (DataAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(list.get(0));
}
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan">
<list>
<value>com.blog.model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop> </props>
</property>
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="add*"/>
<tx:method name="get*" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="bussiness" expression="execution(public * com.registration..*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="bussiness"/>
</aop:config>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="bs" class="com.blog.service.ServiceManager"/>
<bean id="blogAction" class="com.blog.action.GetBlogAction">
<property name="sm" ref="bs"/>
</bean>
1.把
list = (List<Blog>) hibernateTemplate.find("from Blog");
改成
list = (List<Blog>) getHibernateTemplate().find("from Blog");
2.把你的hibernateTemplate的属性改成protected。
推荐使用第一种方法
第一种方法我用过的!也不行!第二种方法,我改为public都不行的!
public void setBlogDAO(BlogDAO blogDAO) {
System.out.println("set blogDAO000000000000000000000"); System.out.println(blogDAO);
this.blogDAO = blogDAO;
}
public void addBlog(Blog blog) {
System.out.println("blog service impl");
// blog.setPath("path");
System.out.println("ab:"+blog.getBlogAbstract()); System.out.println(blogDAO);
blogDAO.save(blog);
都在同一个类中,红色的都有输出,但是 blogDAO.save(blog)就为空指针了,blog是不空的!
<bean id="super" class="com.blog.dao.superDAO">
<property name="hibernateTemplate" ref="hibernateTemplate">
</bean> <bean id="bs" class="com.blog.dao.blogDAOImpl">
<property name="hibernateTemplate" ref="hibernateTemplate">
</bean> 我遇到过这个问题在子类dao中也要注入一遍,否则不行,报空指针。
但不知到什么原因,期待高手解答。
否则直接将HibernateTemplate注入的需要的地方,看是否为空。