2015-04-26 153 views
1

目前我是春天新来试图用MySQL实现数据源,但我面临一个错误,但不能明白是什么主要原因或错误。异常在线程“主”java.lang.ExceptionInInitializerError

Exception in thread "main" java.lang.ExceptionInInitializerError  
Apr 26, 2015 8:09:33 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh 
    INFO: Refreshing org[email protected]4ee70b: startup date [Sun Apr 26 20:09:33 IST 2015]; root of context hierarchy 
    Exception in thread "main" java.lang.ExceptionInInitializerError 
     at org.springframework.context.support.AbstractRefreshableApplicationContext.createBeanFactory(AbstractRefreshableApplicationContext.java:194) 
     at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:127) 
     at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:465) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:395) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
     at com.rajdeo.jdbcspring.JdbcDemo.main(JdbcDemo.java:12) 
    Caused by: java.lang.NullPointerException 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.<clinit>(DefaultListableBeanFactory.java:104) 
     ... 7 more 

JdbcDemo.java

package com.x.jdbcspring; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import com.x.jdbcspring.JdbcDaoImpl; 

public class JdbcDemo { 
    public static void main(String[] args) { 
    ApplicationContext ctx= new ClassPathXmlApplicationContext("spring.xml"); 
     JdbcDaoImpl dao=ctx.getBean("JdbcDaoImpl",JdbcDaoImpl.class); 

     /* 
     //JdbcDaoImpl dao=new JdbcDaoImpl(); 
     Student student=ctx.getStudent(1); 
     System.out.println("name::\t"+student.getName()); 

     JdbcDaoImpl jdbc=new JdbcDaoImpl(); 
     jdbc.getStudent(1); 

     System.out.println(jdbc.getStudent(1).getId());*/ 
    } 
} 

JdbcDaoImpl.java

package com.x.jdbcspring; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import javax.sql.DataSource; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Component; 


@Component 
public class JdbcDaoImpl { 


    @Autowired 
    private DataSource datasource; 


    public DataSource getDatasource() { 
     return datasource; 
    } 


    public void setDatasource(DataSource datasource) { 
     this.datasource = datasource; 
    } 


    public Student getStudent(int id){ 

     Connection con = null; 
     Student student=null; 
      try{ 
     /*  Class.forName("com.mysql.jdbc.Driver"); 
       System.out.println("Connecting to database...");*/ 
       con = datasource.getConnection(); 
       PreparedStatement stmt=con.prepareStatement("select * from contact where contact_id =?"); 
       stmt.setInt(1, id); 

       //Excute the query 
       ResultSet rs=stmt.executeQuery(); 
       while(rs.next()){ 
        String name=rs.getString("name"); 
        student=new Student(id, name); 
       } 

      //close the statement and Resultset 
      stmt.close(); 
      rs.close(); 

      return student; 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

     finally{ 
      if(con!=null) 
       try { 
        con.close(); 
       } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

     }  
     return student; 
    } 

} 

Student.java

package com.rajdeo.jdbcspring; 

public class Student { 

    private int id; 
    private String name; 
    public Student(int id, String name) { 
     // TODO Auto-generated constructor stub 
     this.id = id; 
     this.name = name; 
    } 

    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

spring.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 


<context:annotation-config /> 
<context:component-scan base-package="com.rajdeo" /> 

<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
<property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/student" /> 
     <property name="username" value="root" /> 
     <property name="password" value="xxxx" /> 
</bean> 
</beans> 

什么是错误我无法理解它,任何帮助表示赞赏。

+0

你有NPE。 –

+0

@nikpon什么是NPE?你能否详细说明一下。 – user

+1

NPE = java.lang.NullPointerException –

回答

0

看起来你是从上下文

ctx.getBean("JdbcDaoImpl",JdbcDaoImpl.class) 

得到一个豆,但在spring.xml这个bean没有定义。结果你得到NPE = java.lang.NullPointerException

要解决此问题,您必须配置JdbcDaoImpl服务。例如。

<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
<property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/student" /> 
     <property name="username" value="root" /> 
     <property name="password" value="xxxx" /> 
</bean>  
<bean id="JdbcDaoImpl" 
     class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl"> 
    <property name="datasource" ref="datasource"/> 
</bean> 
0

spring.xml说扫描组件的封装件com.rajdeo,但你的JdbcDaoImpl类是在包com.x.jdbcspring,所以它不会被拾起,即使它有一个@Component注解。

确保包括包含在组件扫描过程JdbcDaoImpl包:

<context:component-scan base-package="com.rajdeo, com.x.jdbcspring" /> 
相关问题