请求处理失败;嵌套异常是java.lang.NullPointerException Spring hibernate集成

请求处理失败;嵌套异常是java.lang.NullPointerException Spring hibernate集成,java,spring,hibernate,spring-mvc,nullpointerexception,Java,Spring,Hibernate,Spring Mvc,Nullpointerexception,我不熟悉spring和hibernate。我创建了一个项目,下面是它的功能。 应用程序在JSP中具有表单元素,在按下submit后,表单元素重定向到控制器类。控制器调用服务层,服务层依次调用DAO,最后将记录添加到数据库中。我遇到的问题是,在控制器类中,我可以接收请求参数(POST),但问题是调用服务层的addMember()时出现了问题。问题在于对象上的Null指针异常。你们能复习一下代码并给我一些建议吗 这是我的控制器类LoginController package com.online.s

我不熟悉spring和hibernate。我创建了一个项目,下面是它的功能。 应用程序在JSP中具有表单元素,在按下submit后,表单元素重定向到控制器类。控制器调用服务层,服务层依次调用DAO,最后将记录添加到数据库中。我遇到的问题是,在控制器类中,我可以接收请求参数(POST),但问题是调用服务层的addMember()时出现了问题。问题在于对象上的Null指针异常。你们能复习一下代码并给我一些建议吗

这是我的控制器类LoginController

package com.online.site.member;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.online.site.Member.Member;
import com.online.site.Member.MemberBoImpl;

@Controller
@RequestMapping("/Login.htm")
public class LoginController {
@Autowired
//@Qualifier(value="memberServiceImp")
private MemberBoImpl memberServiceImpl;


    public void setMemberServiceImp(MemberBoImpl memberServiceImpl) {
    this.memberServiceImpl = memberServiceImpl;
    System.out.println(memberServiceImpl.toString());
}

    @RequestMapping(method=RequestMethod.POST)
    public String executeLogin(@ModelAttribute("Login") Member member, BindingResult result)
    {
        /* call member record fetch method from service layer.
         * if login successful redirect to home page. If not a member 
         * call create member method from service layer and redirect to create account page*/
        memberServiceImpl.addMember(member);
        //memberServiceImp.getMemberDetails(member.getMemberId());
        return "CreateMemberProfile";
    }

    @RequestMapping(method=RequestMethod.GET)
    public String initializeMemberLoginForm(ModelMap model)
    {
        Member member = new Member();
        model.addAttribute("Login", member);
        return "Login";


    }
}
这是服务班

@Service
public class MemberBoImpl implements MemberInterface{
//@Autowired
    private MemberDaoImpl memberDaoImpl;
/*private HibernateTemplate hibernateTemplate;

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
        this.hibernateTemplate = hibernateTemplate;}*/

    public void setMemberDaoImpl(MemberDaoImpl memberDaoImpl) {
        this.memberDaoImpl = memberDaoImpl;
        System.out.println("in doa setter");
    }

    public boolean addMember(Member member) {
        //hibernateTemplate.save(member);
        System.out.println("in bo impl"+member.getMemberId());
        System.out.println(memberDaoImpl.toString());
        memberDaoImpl.addMember(member);
        return false;
    }
}
这是道课

package com.online.site.Member;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.HibernateTemplate;

public class MemberDaoImpl implements MemberInterface{
@Autowired
    private HibernateTemplate hibernateTemplate;

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
        this.hibernateTemplate = hibernateTemplate;
        System.out.println("in hibernate setter");}

    public boolean addMember(Member member) {
        System.out.println("dao impl");
        hibernateTemplate.save(member);
        return false;
    }


}
下面是config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
        http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.2.xsd">

    <context:annotation-config/>

<!--    <context:component-scan base-package="com.online.site"></context:component-scan> -->

    <bean id="memberServiceImpl" class="com.online.site.Member.MemberBoImpl"
        scope="singleton" autowire="byType">
     <property name="memberDaoImpl" ref="memberDaoImpl"></property>
 <!--  <property name="hibernateTemplate" ref="hibernateTemplate"></property>-->
    </bean>

    <bean id="member" class="com.online.site.Member.Member"/>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/onlineshopssite"></property>
        <property name="username" value="root"></property>
        <property name="password" value="admin"></property>
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

        <property name="dataSource" ref="dataSource"></property>

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>

        <property name="annotatedClasses">
            <list>
                <value>com.online.site.Member.Member</value>
            </list>
        </property>
    </bean>

    <bean name="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
     <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

       <bean id="memberDaoImpl" class="com.online.site.Member.MemberDaoImpl" autowire="byType">
    <property name="hibernateTemplate" ref="hibernateTemplate"></property>
    </bean>
</beans>

org.hibernate.dialogue.mysqldialogue
真的
com.online.site.Member.Member
下面是dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <import resource="classpath*:/onlineShop-config.xml" />


    <!-- step eight: http://localhost:8080/Spring3MVCDemo/customer.htm -->
<context:component-scan base-package="com.online.site,com.online.site.Billing,com.online.site.Member"></context:component-scan>


    <!-- step 12 public String initializeCustomerForm(ModelMap model) { returning 
        string value return "createCustomer" createCustomer prefix and suffix will 
        be added by the InternalResourceViewResolver http://localhost:8080/Spring3MVCDemo/createCustomer.jsp -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp" />

    </bean>

</beans>


我在不同的论坛上尝试了很多建议,但似乎没有任何效果。我很可能错过了一些basci步骤。有人能看一下我的代码并提出建议吗?

您的hibernateTemplate没有被注入b/c spring不知道它需要对类MemberDaoImpl做任何事情。您需要将其注释为@Component或@Repository,就像您对@Controller所做的那样。现在,它不是自动连接的相关目标。

必须对服务和存储库进行注释,避免通过XML声明它们

首先

不再推荐使用
HibernateTemplate
,您可以直接在存储库中使用Hibernate
SessionFactory

第三


您必须用@Transactional注释
@Service
@Repository
,因为Hibernate将请求事务支持。此外,还需要在配置中为
transactionManager

定义一些额外的bean。此外,如果使用字段注入,则不需要设置器(除非您计划在业务逻辑中的某个地方更改
HibernateTemplate
s,这似乎不太可能).我有一个被注释为@Service的类。从这个类中,我称之为MemberDAOImpl。我试图在MemberDAOImpl中添加组件,但它给出了相同的错误。当我通过创建applicationcontext在普通java类中调用服务类时,它工作得很好。
public class MemberDaoImpl implements MemberInterface{
@Repository
public class MemberDaoImpl implements MemberInterface{