getHibernateTemplate()有空指针异常
我首先讲下类的结构有一个IDao主接口,用了IDaoImpl实现同时继承了HibernateDaoSupport。然后有一个UserDaoImpl继承了IDaoImpl,...
我首先讲下类的结构
有一个IDao主接口,用了IDaoImpl实现同时继承了HibernateDaoSupport。 然后有一个UserDaoImpl继承了IDaoImpl,是空继承,自身没有方法。
然后我的业务有一个IUserService接口以及一个实现类UserServiceImpl。UserServiceImpl类有一个对象的实例IDao userImpl = new UserDaoImpl()。
我的spring配置是
<bean id="userService" class="com.user.service.serviceimpl.UserServiceImpl">
<property name="userDaoImpl" ref="userDaoImpl"></property>
</bean>
<bean id="userDaoImpl" class="com..user.daoimpl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
个人感觉没有问题啊 为什么我的getHibernateTemplate()有空指针异常呢。
com..user.daoimpl.UserDaoImpl这是笔误,不要追究这个地方!
总算知道是哪的问题了 哈哈 其实是那样的 我是用JSF hibernate spring框架整合的 而我的JSF 受关bean用了默认的方式没有写配置文件,所以其实是没有注入的。后来我完全改成配置文件注入就成功了。谢谢你,从这次的问题我对spring的注入思想理解了很多。为了使耦合性降低我们需要生成实例时不适用具体的类,只使用接口,而spring的注入方式就是这一解决方案。 展开
有一个IDao主接口,用了IDaoImpl实现同时继承了HibernateDaoSupport。 然后有一个UserDaoImpl继承了IDaoImpl,是空继承,自身没有方法。
然后我的业务有一个IUserService接口以及一个实现类UserServiceImpl。UserServiceImpl类有一个对象的实例IDao userImpl = new UserDaoImpl()。
我的spring配置是
<bean id="userService" class="com.user.service.serviceimpl.UserServiceImpl">
<property name="userDaoImpl" ref="userDaoImpl"></property>
</bean>
<bean id="userDaoImpl" class="com..user.daoimpl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
个人感觉没有问题啊 为什么我的getHibernateTemplate()有空指针异常呢。
com..user.daoimpl.UserDaoImpl这是笔误,不要追究这个地方!
总算知道是哪的问题了 哈哈 其实是那样的 我是用JSF hibernate spring框架整合的 而我的JSF 受关bean用了默认的方式没有写配置文件,所以其实是没有注入的。后来我完全改成配置文件注入就成功了。谢谢你,从这次的问题我对spring的注入思想理解了很多。为了使耦合性降低我们需要生成实例时不适用具体的类,只使用接口,而spring的注入方式就是这一解决方案。 展开
展开全部
你在继承时出错了
UserDaoImpl 应该去实现IDaoImpl,不是继承,即使继承了,在UserDaoImpl里也应该要存在方法的。要不然你再
IDao userImpl = new UserDaoImpl()。
userImpl 调用方法肯定会空指针的,但在new的时候是不会报错的。
因为在UserDaoImpl调用父类方法的时候super是找不到上级方法的因为没指明。
UserDaoImpl 应该去实现IDaoImpl,不是继承,即使继承了,在UserDaoImpl里也应该要存在方法的。要不然你再
IDao userImpl = new UserDaoImpl()。
userImpl 调用方法肯定会空指针的,但在new的时候是不会报错的。
因为在UserDaoImpl调用父类方法的时候super是找不到上级方法的因为没指明。
追问
IDaoImpl已经实现了IDao的所有方法 你注意看!因为我的很多业务都相似 所以我先写了一个公共的父类实现了IDao 然后再使各业务中的XXXDaoImpl去继承IDaoImpl,这样是为了最大限度的复用代码。我的new本身是不会出错的,可能是spring注入后,不能用new的问题,你要自己看!
追答
UserDaoImpl 是Dao的实现,那么你Spring 注入的时候则需要注入你的接口了,而不是具体的实现类了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用Spring注入 就不能直接用new了,你这个问题我也遇到过不过忘了怎么解决的了!
你首先看看引用的biz、action有没有get、set方法,还有最重要的原因可能是没注入进去,
你再看看
你首先看看引用的biz、action有没有get、set方法,还有最重要的原因可能是没注入进去,
你再看看
追问
是没有注入进去 因为getHibernateTemplate()本身是空的!我也觉得是new的问题,其实我刻意把IDao userImpl = new UserDaoImpl()写出来就是想知道是不是这句的问题。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵,关键是不能new出来,需要用spring注入,因为spring在注入的时候会做初始化,你的new不会
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询