Spring 3.x 升级到Spring 4.x 注意事项和步骤,错误解决方法
一、首先我们来罗列一下Spring4.x的大变化。
- 支持
JDK8
(这个是最主要的)。 Groovy Bean Definition DSL
风格配置。依赖注入支持泛型。
合并部分注解,如
@RestController
=@Controller
+@ReponseBody
。- 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
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。