Spring 3.x 升级到Spring 4.x 注意事项和步骤,错误解决方法

JSON 2016-08-22 15:09:30 50407

一、首先我们来罗列一下Spring4.x的大变化。

  1. 支持JDK8 (这个是最主要的)。
  2. Groovy Bean Definition DSL 风格配置。

  3. 依赖注入支持泛型。

  4. 合并部分注解,如@RestController  @Controller @ReponseBody 

  5. Spring-test 部分功能的改进。

不扯了。言归正传。升级要注意什么。

二、把Spring 相关Jar包换成4.x的jar包。

基本上你把原来的Spring 3.x 的包,直接替换成你需要的Spring 4.x 的包。如我就是从Spring 3.2.0.RELEASE  ==> Spring 4.2.5.RELEASE  升级,如果包有问题,你直接用下面的(一般项目基本够了)。

<!-- Spring 在 3.2.13版本后,要单独引用 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.2.5.RELEASE</version>
</dependency>
<!-- Spring 在 3.2.13版本后,要单独引用 -->

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-test</artifactId>
	<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>4.2.5.RELEASE</version>
</dependency>

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context-support</artifactId>
	<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.2.5.RELEASE</version>
</dependency>

好了,差不多了。这里需要注意的是spring-context 包,因为我发现在Spring 3.2.13 后就要单独引用,因为有的.class 从原来其他的包中拆出来了。如定时任务(我不能肯定)。

三、改变Spring各种配置文件。

<?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:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
    		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
			http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
	default-lazy-init="false">

之前各个 Spring  的配置文件,应该是这样的,其他不用动,把3.0 改成4.0 即可,或者把-3.0 直接删除也可以。建议配置为4.0

PS:这里有个小细节。

如果你用到了ref 标签的 bean 。如:

<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
	.....
     <property name="sessionListeners">
         <list>
             <ref local="customSessionListener"/>
         </list>
     </property>
     .....
</bean>

这里的ref 中, Spring  4.0 后不能用local ,你得改成bean 。也就是改成这样。<ref bean="customSessionListener"/>

<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
	.....
     <property name="sessionListeners">
         <list>
             <ref bean="customSessionListener"/>
         </list>
     </property>
     .....
</bean>

如果不改启动报错:cvc-complex-type.3.2.2: 元素 'ref' 中不允许出现属性 'local'

这样就基本完事了。

启动项目吧。可能没什么错误。你访问个 Ajax  链接试试。

发现报错如下:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.JavaType.isReferenceType()Z
省略200行
....

那么把下面 Spring  4.x 依赖的相关 json   jar  包加上即可。

<!-- Spring 升级4+ 依赖的JSON包 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.7.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.7.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.7.4</version>
</dependency>
<!-- /Spring 升级4+ 依赖的JSON包 -->

如果还是出现错误,请检查 Spring  的jar是不是4.5或者以下。或者把 jackson  包降低版本。基本能解决!

好,打完收工。如果还有其他错误,请加群问我,知无不答。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/145.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
Spring 3.x 升级到Spring 4.x 注意事项步骤错误解决方法
七牛Maven项目使用,以及注意事项
Shiro教程(三)Shiro web.xml中Filter配置,配置注意事项
Autojs怎么安全加密?Autojs在线加密工具注意事项
MySql数据库优化注意的四个细节(方法
ZeroClipboard.config is not a function ZeroClipboard is not defined 错误解决
域名备案注意事项,网站域名ICP备案快速通过攻略【干货分享】
Spring 静态变量入赋值,静态方法调用,静态语句块
Spring 静态入讲解(MethodInvokingFactoryBean)
Spring JPA查询,JPA 根据方法名字查询详细介绍
最新文章
Flink 在又拍云日志批处理中的实践 8580
个推异常值检测和实战应用-又拍云 1705
TCP 和 UDP协议详细讲解,优缺点分析讲解 8055
URL中乱七八糟的字符讲解,来源以及如何解决 5184
HTTP/3 来了,您真的了解它么? 6221
技术选型:为什么批处理我们却选择了Flink 2359
这些表情包你有吗?一起来 Battle 啊 3460
当我谈 HTTP 时,我谈些什么? 11782
新浪短链(t.cn)最新申请官方API的方法讲解。 72718
QUIC / HTTP3 协议详细分析讲解 10571
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 653470
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 603231
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 496019
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 492966
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 492902
Elasticsearch教程(四) elasticsearch head 插件安装和使用 452127
免费天气API,天气JSON API,不限次数获取十五天的天气预报 260196
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 229867
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 203369
Elasticsearch教程(一),全程直播(小白级别) 192743
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...