Spring jdbctemplate运行时出现空指针异常

Spring jdbctemplate运行时出现空指针异常,spring,spring-jdbc,Spring,Spring Jdbc,使用SpringJDBC示例获取NullPointerException java.lang.NullPointerException at com.net.technicalkeeda.dao.PersonDaoImpl.findTotalCustomer(PersonDaoImpl.java:46) 这就是当我从控制器调用findTotalCustomer方法时,将jdbcTemplate获取为NULL的方法。但在服务器启动时,它会将值分配给datasource和jdbctempl

使用SpringJDBC示例获取NullPointerException

java.lang.NullPointerException
    at com.net.technicalkeeda.dao.PersonDaoImpl.findTotalCustomer(PersonDaoImpl.java:46)
这就是当我从控制器调用findTotalCustomer方法时,将jdbcTemplate获取为NULL的方法。但在服务器启动时,它会将值分配给datasource和jdbctemplate。你能帮我解释一下为什么有空值吗

这是我访问dao方法时使用的控制器类

public class HelloController implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath*:/WEB-INF/springtutorial-servlet.xml");

        if (ctx != null) {
            personDao = (PersonDaoImpl)ctx.getBean("personDao");
        }


        personDao.findTotalCustomer();

        return new ModelAndView("hello.jsp");
    }

}

我的猜测是Spring实例化了它的bean并注入了数据源,但不是从SpringBean工厂获取bean,而是自己实例化一个,从而使用另一个实例,而不是在Spring的控制下,因此没有使用数据源初始化

你永远不应该做
newsomespringbean()
。所有bean引用都应该是注入依赖项,或者应该通过向springbean工厂请求bean来获得


因此,如果您的代码确实执行了
newpersondaimpl()
,那么一定是出了问题。

我冒昧地猜测一下,您没有正确地从上下文文件中获取bean。新的操作员和弹簧不好用。我假设您知道如何从
应用程序context.xml
中获取bean,但如果不知道,我还是把它留在这里

    //simple singleton
    private static void initApplicationContext() {
    if (_applicationContext == null)
        _applicationContext = new ClassPathXmlApplicationContext("PersistenceHelper-context.xml");
}
//get bean
Datasource dataSource = (DataSource) _applicationContext.getBean("dataSource");

那么persondaimpl呢?是singleton吗?@Nandkumar它不是singleton类,dao实现类,希望使用jdbc访问,但得到nulldataSource@publ1c_stat1cint total=jdbcTemplate.queryForInt(sql);永远不要使用
new
操作符来获取BeanSpring管理的bean实例和。。。顺便说一句,您的spring上下文配置怎么样?您是否使用对有效的
数据源的引用初始化dao
?这是我的控制器方法代码,其中ApplicationContext ctx=new FileSystemXmlApplicationContext(“classpath*:/WEB-INF/springtutorial servlet.xml”);PersonDaoImpl personDao=新的PersonDaoImpl();如果(ctx!=null){personDao=(PersonDaoImpl)ctx.getBean(“personDao”);}personDao.findTotalCustomer();ApplicationContext ctx=新文件系统XMLApplicationContext(“类路径*:/WEB-INF/springtutorial servlet.xml”);PersonDaoImpl personDao=新的PersonDaoImpl();如果(ctx!=null){personDao=(PersonDaoImpl)ctx.getBean(“personDao”);}personDao.findTotalCustomer();
17 Jul, 2012 8:08:52 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\javaworkspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringTutorial\WEB-INF\lib\j2ee.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
17 Jul, 2012 8:08:52 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'springtutorial'
17 Jul, 2012 8:08:52 PM org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'springtutorial': initialization started
17 Jul, 2012 8:08:52 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.web.context.support.XmlWebApplicationContext@7ab2c6a6: display name [WebApplicationContext for namespace 'springtutorial-servlet']; startup date [Tue Jul 17 20:08:52 IST 2012]; root of context hierarchy
17 Jul, 2012 8:08:52 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/springtutorial-servlet.xml]
17 Jul, 2012 8:08:52 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.web.context.support.XmlWebApplicationContext@7ab2c6a6]: org.springframework.beans.factory.support.DefaultListableBeanFactory@2d8e8541
17 Jul, 2012 8:08:52 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2d8e8541: defining beans [dataSource,personDao,helloController,loggerInterceptor,performanceInterceptor,urlMapping]; root of factory hierarchy
17 Jul, 2012 8:08:53 PM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
INFO: Loaded JDBC driver: com.mysql.jdbc.Driver
**Updated Datasouce---->org.springframework.jdbc.datasource.DriverManagerDataSource@38827968
Updated Jdbctemplate---->org.springframework.jdbc.core.JdbcTemplate@7df0b7d3**
17 Jul, 2012 8:08:53 PM org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'springtutorial': initialization completed in 453 ms
17 Jul, 2012 8:08:53 PM org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
17 Jul, 2012 8:08:53 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
17 Jul, 2012 8:08:53 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/0  config=null
17 Jul, 2012 8:08:53 PM org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
17 Jul, 2012 8:08:53 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1749 ms
    //simple singleton
    private static void initApplicationContext() {
    if (_applicationContext == null)
        _applicationContext = new ClassPathXmlApplicationContext("PersistenceHelper-context.xml");
}
//get bean
Datasource dataSource = (DataSource) _applicationContext.getBean("dataSource");