2013-05-23 2 views
-3

싱글 톤 클래스를 만들고 그 안에 메서드를 호출합니다. 나는 봄 mvc SimpleJdbcTemplate 데이터베이스에서 데이터를 검색하는 데 사용하지만, NullPointerException 얻을. 내가 쓴 코드입니다 : 내가 얻을스프링 mvc에서 싱글 톤 클래스를 사용하여 데이터 가져 오기

package in.dewsolutions.jc.utils; 

import in.dewsolutions.jc.dao.ReportsDAO; 
import in.dewsolutions.jc.dto.ReportsView; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.List; 

import javax.annotation.PostConstruct; 
import javax.sql.DataSource; 

import org.apache.log4j.Logger; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.config.PropertiesFactoryBean; 
import org.springframework.jdbc.core.RowMapper; 
import org.springframework.jdbc.core.simple.ParameterizedRowMapper; 
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; 
import org.springframework.stereotype.Component; 
import org.springframework.stereotype.Repository; 
import org.springframework.stereotype.Service; 

public class SingletonFilterData { 
    private static final Logger logger = Logger.getLogger(SingletonFilterData.class); 

    @Autowired 
    private SimpleJdbcTemplate simpleJdbcTemplate; 

    @Autowired 
    public void setDataSource(DataSource dataSource) { 
     this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource); 
    } 

    private SingletonFilterData() // private defaul constructor 
    { 
    } 

    private static SingletonFilterData reference = null; 

    public static SingletonFilterData getInstance() { 

     if (reference == null) { 
      synchronized (SingletonFilterData.class) { 
       if (reference == null) { 
        reference = new SingletonFilterData(); 

       } 
      } 

     } 
     return reference; 
    } 

    public List<ReportsView> findManuFacturer() { 
     // TODO Auto-generated method stub 
     List<ReportsView> manufacturer = new ArrayList<ReportsView>(); 

     ReportsView rv = new ReportsView(); 
     rv.setProductName("None"); 
     rv.setProductId(0); 
     manufacturer.add(rv); 

     String query = "SELECT * FROM manufacturer ORDER BY name"; 
     ParameterizedRowMapper<ReportsView> mapper = new ParameterizedRowMapper<ReportsView>() { 
      public ReportsView mapRow(ResultSet rs, int rowNum) 
        throws SQLException { 
       ReportsView reportsView = new ReportsView(); 
       reportsView.setProductName(rs.getString("name")); 
       reportsView.setProductId(rs.getLong("id_manufacturer")); 

       return reportsView; 
      } 
     }; 
     manufacturer.addAll(simpleJdbcTemplate.query(query, mapper)); 
     return manufacturer; 
    } 

는 예외입니다 :

type Exception report 

message 

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125) 

root cause 

java.lang.NullPointerException 
    in.dewsolutions.jc.utils.SingletonFilterData.findManuFacturer(SingletonFilterData.java:77) 
    in.dewsolutions.jc.controller.ReportsController.filterQuantity(ReportsController.java:169) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125) 

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs. 

가 어떻게 예외를 제거 할 수 있습니다

?

+0

어떤 줄이 SingletonFilterData.java에 있습니까? –

+0

제조업체 .addAll (simpleJdbcTemplate.query (query, mapper))); – user2409707

답변

1

new SingletonFilterData()을 사용하면 자동 배선이 호출되지 않으므로 simpleJdbcTemplatenull으로 유지됩니다.

getInstance()을 구현하는 대신 SingletonFilterDataReportsController에 삽입되도록 Spring을 구성 할 수 있습니다.

+0

감사합니다 fgb,이 명확한 내 autowiring 개념 – user2409707

관련 문제