Java 如何从spring-dispatcher-servlet.xml访问SessionFactory到DAO

Java 如何从spring-dispatcher-servlet.xml访问SessionFactory到DAO,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,我正在hibernate的帮助下创建一个SpringWeb应用程序。我已经为所有配置创建了spring-dipatcher-servlet.xml。我想使用hibernate访问数据库,而不用像使用spring一样创建hibernate.cfg.xml文件。我在访问DAO中的会话工厂时遇到空指针异常 以下是我迄今为止所做的工作的片段 ----web.xml---- ---服务--- ---刀--- @存储库 公共类UserDao实现了IUser{ @自动连线 会话工厂会话工厂; public S

我正在hibernate的帮助下创建一个SpringWeb应用程序。我已经为所有配置创建了spring-dipatcher-servlet.xml。我想使用hibernate访问数据库,而不用像使用spring一样创建hibernate.cfg.xml文件。我在访问DAO中的会话工厂时遇到空指针异常

以下是我迄今为止所做的工作的片段

----web.xml----

---服务---

---刀---

@存储库
公共类UserDao实现了IUser{
@自动连线
会话工厂会话工厂;
public SessionFactory getSessionFactory(){
返回工厂;
}
public void setSessionFactory(SessionFactory SessionFactory){
this.sessionFactory=sessionFactory;
}
@凌驾
公共布尔认证器(用户){
字符串username=user.getUsername();
char[]password=user.getPassword();
System.out.println(用户名+“”+密码);
字符串hql=“来自用户名='username'和密码='password'”所在的用户;
Query Query=getSessionFactory().openSession().createQuery(hql);
列表=新的ArrayList();
list=query.list();
if(list.size()>0&&list!=null){
返回true;
}
返回false;
}
}
我如何解决我的问题,我做错了什么


提前谢谢。非常感谢您的帮助。

这里的问题是当前您的dispatcher servlet不知道如何从创建和设置bean
SessionFactory
。(如您所见,您的setSessionFactory位于UserDao类中)

您可能需要在
springdispatcherservlet.xml
中声明
UserDao
bean

例如:

<bean id="userDAO" class="your.package.nameforUserDao">
  <property name="sessionFactory" ref="sessionFactory" />
</bean>

这里的问题是,当前您的dispatcher servlet不知道如何从创建和设置bean
SessionFactory
。(如您所见,您的setSessionFactory位于UserDao类中)

您可能需要在
springdispatcherservlet.xml
中声明
UserDao
bean

例如:

<bean id="userDAO" class="your.package.nameforUserDao">
  <property name="sessionFactory" ref="sessionFactory" />
</bean>


您正在执行
新用户服务()
,不要这样做。在控制器中自动连线。您正在执行
new UserService()
,不要这样做。在控制器中自动连线。
@Controller
public class QuizMcqController {

    UserService userService;

    @RequestMapping(value="/welcome.htm")
    public ModelAndView redirectToLoginPage(){

        ModelAndView modelAndView = new ModelAndView("login");
        return modelAndView;

    }

    @RequestMapping(value="/AuthenticateUser.htm", method = RequestMethod.POST)
    public ModelAndView authenticateUser(@RequestParam("username") String username, @RequestParam("password")String password){

        userService = new UserService();
        boolean flag  = userService.authenticate(username,password);
        if(flag){
            ModelAndView modelAndView = new ModelAndView("login");
            return modelAndView;
        }
        else{
            ModelAndView modelAndView = new ModelAndView("wrong");
            return modelAndView;
        }


    }


}
public class UserService {

    User user;
    UserDao dao;

    public boolean authenticate(String username, String password) {
        user = new User();
        user.setUsername(username);
        user.setPassword(password.toCharArray());

        if(dao.authenticateUser(user))
        {
            return true;
        }

        return false;

    }
}
@Repository
public class UserDao implements IUser {

    @Autowired
    SessionFactory sessionFactory;

    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    @Override
    public boolean authenticateUser(User user) {
        String username = user.getUsername();
        char[] password = user.getPassword();
        System.out.println(username +" <----> "+password);
        String hql = "from User where username='username' and password ='password'";
        Query query = getSessionFactory().openSession().createQuery(hql);
        List list = new ArrayList();
        list = query.list();
        if (list.size() > 0 && list != null) {
            return true;
        }

        return false;
    }

}
<bean id="userDAO" class="your.package.nameforUserDao">
  <property name="sessionFactory" ref="sessionFactory" />
</bean>