当前位置: 首页 > 知识库问答 >
问题:

SpringMVC的ApplicationContext访问导致NullPointerException

堵彬彬
2023-03-14

每当我试图获取SpringMVC的ApplicationContext时,都会抛出一个NullPointerException

这是我的用户道:

package com.markor.smarthome.dao;

import com.markor.smarthome.entities.Users;
import com.markor.smarthome.utilites.SpringContextUtil;
import com.markor.smarthome.utilites.StringUtilty;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by litongjie on 2015/5/12.
 */
public class UserDao {

private JdbcTemplate jdbcTemplate = (JdbcTemplate)         SpringContextUtil.getBeans("jdbcTemplate");
private String isExistSql = "SELECT *  FROM users WHERE user_id=?";
private String addUserSql = "INSERT INTO users(`user_id`,`password`,`name`,`email`,`note`)VALUES(?,?,?,?,?)";

public boolean isExist(String userID) {

    Users user = jdbcTemplate.queryForObject(isExistSql, Users.class, userID);
    //如果为空 返回false不存在
    if (StringUtilty.isNullOrEmpty(user.getUser_id())) {
        return false;
    } else return true;
}

public int AddUser(Users user) {
    System.out.println("begen");
    Map<String, Object> map = new HashMap<>();
    map.put("user_id", user.getUser_id());
    map.put("password", user.getPassword());
    map.put("name", user.getName());
    map.put("email", user.getEmail());
    map.put("note", user.getNote());
    int i = jdbcTemplate.update(addUserSql, map);
    return i;
}

public static void main(String[] args) {
    System.out.println("main begin");
    Users users = new Users();
    users.setUser_id("123");
    users.setName("LI");
    users.setNote("444");
    System.out.println("user end"+users);
    UserDao userDao = new UserDao();
    System.out.print(userDao.AddUser(users));
}
}
package com.markor.smarthome.utilites;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import javax.servlet.ServletContext;

/**
    * 获取Spring上下文及国际化
 *
 * @author bingchuan -->www.vijun.com
 */
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext application = null;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext)     throws BeansException {
    this.application = applicationContext;
}

public static ApplicationContext getApplicationContext() {
    return application;
}

public static Object getBeans(String beanname) {
    ApplicationContext applicationContext = getApplicationContext();
    return applicationContext.getBean(beanname);
}

线程“main”java.lang.NullPointerException位于com.markor.smarthome.utilites.SpringContextutil.getBeans(SpringContextutil.java:31)位于com.markor.smarthome.dao.userdao.(userdao.java:18)位于com.markor.smarthome.dao.userdao.main(userdao.java:50)位于sun.reflect.nativeMethodAccessorImpl.Invoke0(原生方法)位于

共有1个答案

长孙作人
2023-03-14

那看起来完全不对。您的spring上下文是从哪里开始的?如果要在main()方法的某个地方使用它,就必须编写如下内容:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/application-context.xml");

(但在这种情况下,您不需要SpringContextUtil,因为您已经有了上下文)。

但是为什么不将UserDao添加到上下文中,让spring将jdbcTemplate bean注入其中呢?

public class UserDao {
@Autowire
private JdbcTemplate jdbcTemplate;
.....

spring上下文:

<bean id="jdbcTemplate" class=.../>
<bean id="userDao" class="com.markor.smarthome.dao.UserDao"/>
 类似资料:
  • 在尝试遍历ShapeContainer的内部内容时,我希望通过检查的父项来区分和不是的子项: 无论是否是的子级,这对于每种情况都是相同的。 测试1:检查ShapeContainer是否为XSSFShapeGroup的实例。 测试2:访问子节点后查找父标记。 这清楚地表明父级确实存在,并且还允许我们在进程中检查父级。 我还没有检查其他类型的,如或。但是,由于它们都继承了同一个类,即,我想结果不会有太

  • 本文向大家介绍SpringMVC上传图片与访问,包括了SpringMVC上传图片与访问的使用技巧和注意事项,需要的朋友参考一下 关于springmvc上传图片的方法小编给大家整理了两种方法,具体内容如下所示: 第一种:(放在该项目下的物理地址对应的位置) a. 路径写法: String basePath="/WEB-INF/resources/upload"; String filePathNam

  • 我正在进行搜索,然后循环搜索结果。这会导致我的代码被锁定,更糟糕的是,它会锁定数据库,使其无法进一步使用。即使在浏览器关闭之后。当然,在我再次尝试我的代码之前,这种“锁定”似乎会在一段时间后被清除。我将改变我执行这项特定任务的方式,但我很好奇是什么导致了这种锁定。

  • 本文向大家介绍SpringMVC访问静态资源的方法,包括了SpringMVC访问静态资源的方法的使用技巧和注意事项,需要的朋友参考一下 在SpringMVC中常用的就是Controller与View。但是我们常常会需要访问静态资源,如html,js,css,image等。 默认的访问的URL都会被DispatcherServlet所拦截,但是我们希望静态资源可以直接访问。该肿么办呢? 在配置文件:

  • 我想在不使用IDE的情况下执行我的程序。我已经创建了一个jar文件和一个可执行的jar文件。当我双击exe jar文件时,什么也没有发生,当我尝试在cmd中使用命令时,它给出以下信息: 我使用命令:java-jar Calculator.jar 我是如何创建jar的: 右键单击项目文件夹(计算器) 选择 单击Java文件夹并选择可执行罐文件,然后选择下一个 启动配置:主-计算器 创建出口目的地 命

  • 我是如何创建罐子的: 右键单击项目文件夹(计算器) 选择 单击Java文件夹并选择“Exectuable Jar文件”,然后选择Next 启动配置:main-calculator 创建导出目标 打“完”获利!嗯,也不是。