记录一下学习Spring时的踩坑经验。


Jdk8不兼容Spring4.x以下版本

入门三天,我一直被这控制台一片红苦恼着。

在视频的评论区中没有解决,上论坛上也没有解决。

详细报错:

org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [beans.xml]
Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.clearCache()V
	at org.springframework.context.support.AbstractApplicationContext.resetCommonCaches(AbstractApplicationContext.java:924)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:575)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
	at MyTest.main(MyTest.java:13)

解决

知道我无意间看到这个!!!

Ctrl+Shift+Alt+S,进入项目设置,更换项目的Jdk版本为8以上,我选择的是Jdk12:

如果以上设置还法子解决,那可能还需要再多一步:

不支持发行版本5 或 Compilation failed: internal java compiler error

提示

Error: java: 错误: 不支持发行版本 5

``Error: java: 错误: Compilation failed: internal java compiler error`

分析:

导致这个错误的原因主要是因为jdk版本问题,此处有两个原因,一个是编译版本不匹配,一个是当前项目jdk版本不支持。我的是编译器版本的问题。

解决:

Ctrl+Alt+S,进入IDEA设置,Compiler中设置Java编译器的版本。

解决来源:https://blog.csdn.net/wo541075754/article/details/82119860

NoSuchBeanDefinitionException: No bean named 'user' available

控制台提示以下错误:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'user' available

解决:
检查XML文件中Bean对象的id是否有问题?检查绑定的class是否有问题?等等……
结果,我发现是绑定的XML文件,userbeans.xml绑定成了beans.xml。。。

ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");

同时使用p命名空间、c命名空间

同时使用p命名空间、c命名空间,因为类中缺少无参构造器,控制台会报错:

org.springframework.context.support.AbstractApplicationContext refresh
警告: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'user' defined in class path resource [userbeans.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.melodyhub.pojo.User]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.melodyhub.pojo.User.<init>()

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'user' defined in class path resource [userbeans.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.melodyhub.pojo.User]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.melodyhub.pojo.User.<init>()

解决:

类中加上无参构造器,即可。

NullPointerException

控制台报错:出现空指针

java.lang.NullPointerException

解决

上述问题存在多种情况。

  1. 可能是使用了注解,但是applicationContext.xml中没有该语句
<!--开启对注解的支持-->
<context:annotation-config/>