2015-05-12 3 views
0

Когда я пытаюсь получить SpringMVC's ApplicationContext, вызывается NullPointerException.Приложение SpringMVCContext вызывает NullPointerException

Это мой userDao:

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)); 
} 
} 

Это мой SpringContextUtil

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); 
} 

Я попытался с помощью ответов некоторых других, но это не сработало. Вот мое исключение:

Исключение в потоке "основного" java.lang.NullPointerException в com.markor.smarthome.utilites.SpringContextUtil.getBeans (SpringContextUtil.java: 31) в com.markor.smarthome. dao.UserDao. (UserDao.java:18) at com.markor.smarthome.dao.UserDao.main (UserDao.java:50) at sun.reflect.NativeMethodAccessorImpl.invoke0 (родной метод) at sun.reflect. NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:497) at com.intellij.rt.execution.application.AppMain.main (AppMain.java:140)

ответ

0

Это выглядит совершенно неправильно. Где вы начали свой весенний контекст? Если вы хотите использовать его где-то в методе Main(), вы должны написать что-то вроде этого:

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

(но в этом случае вам не нужно SpringContextUtil, потому что у вас уже есть свой контекст).

Но почему бы вам не добавить UserDao в контекст и позволить Spring вставлять jdbcTemplate bean в него?

что-то вроде этого: UserDao:

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

весна контекст:

<bean id="jdbcTemplate" class=.../> 
<bean id="userDao" class="com.markor.smarthome.dao.UserDao"/> 
+0

Я просто хочу, чтобы добавить пользователя в SQLdb в Lazarus, но, во-первых, я должен получить JdbcTemplate к инертным пользователя в sqldb – user4891240

+0

Если вы хотите использовать Spring jdbcTemplate в своем приложении, [здесь несколько примеров] (http://www.mkyong.com/spring/spring-jdbctemplate-querying-examples/) (очень близко к вашему коду). Но не знаете, зачем вам нужна весна для этого - вы можете использовать простой [JDBC] (http://www.tutorialspoint.com/jdbc/jdbc-sample-code.htm) для этого – Maks

Смежные вопросы