linmengmeng_1314的博客

征途中的小白

Caused by: java.lang.NullPointerException at org.springframework.beans.factory.support.DefaultLis

在搭建完Spring环境之后运行第一个demo的时候 就碰到这个问题,折腾了一天了,到现在才解决,记录一下自己的失误。
解决办法就是在添加user Library的时候 不能勾选System Library,否则后面运行demo的时候会提示空指针异常,这个真的是很郁闷。
这里写图片描述

下面内容为转载的,就是看了别人的博客才发现自己的失误的,学习大神的分析思路:

Caused by: java.lang.NullPointerException
   at org.springframework.beans.factory.support.DefaultListableBeanFactory.<clinit>(DefaultListableBeanFactory.java:106)
   ... 7 more

一看源代码,是这样的:

static{  
    ClassLoader cl =DefaultListableBeanFactory.class.getClassLoader();  
    try{  
        javaxInjectProviderClass = cl.loadClass("javax.inject.Provider");//Line 106  
    }  
    catch(ClassNotFoundException ex){  
        // JSR-330 API not available - Provider interface simply not supported then.  
    }  
}  

源代码的问题在于:

ClassLoader cl =DefaultListableBeanFactory.class.getClassLoader();返回空!

找了找网上:发现别人也遇到过:

http://stackoverflow.com/questions/2272354/why-do-i-get-a-nullpointerexception-when-initializing-spring

再了解了一下getClassLoader() 的原理:

http://blog.chenlb.com/2009/06/java-classloader-architecture.html

原来是这个DefaultListableBeanFactory通过BootStrap直接加载,getClassLoader()的时候返回null

JDK上也有说明:

“public ClassLoader ‍getClassLoader()返回该类的类加载器。有些实现可能使用 null 来表示引导类加载器。如果该类由引导类加载器加载,则此方法在这类实现中将返回 null。 “

细细想来,原来是这里错了:勾选了System library(added to the boot class path),DefaultListableBeanFactory被当成系统Jar通过BootStrap直接加载

阅读更多
版权声明: https://blog.csdn.net/linmengmeng_1314/article/details/79966321
文章标签: 空指针异常 Spring
个人分类: 【Spring】
相关热词: caused
上一篇Eclipse配置springIDE插件、搭建测试环境、简单的demo
下一篇log4j:WARN No appenders could be found for logger
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭