- 先交代一下改造前项目背景:
- 原始项目只迭代了2个大的版本,所以代码量也不算很大,但是旧项目连maven都不是,而且经过好多人手,管理混乱。
- 用的spring4.2+hibernate4+struts2,后来整合进的redis也是用jedis写的工具类,连配置都是直接写在java文件里面。
- 项目用了一些struts2拦截器,还有spring的AOP以及AspectJ和原生filter和servlet,总之项目的整体控制这块比较乱。
- 登录、权限都没有使用框架,使用的比较原始的方法。
- 项目前后端分离,所有接口都只返回JSON,只有几个接口有转发和重定向。
- 改造已经过去一个多月,通过测试验收之后马上在新框架上又迭代了新版本,所以不是实时记录没有截图,主要记录过程。
- 改造过程:
- 将项目改造成由maven管理的SSH项目,保证改造完项目能跑起来不报错。
- 加入springMVC的依赖,和springMVC配置文件(之后换SpringBoot其实还是会删除,但是先保证Struts2顺利被SpringMVC替换,戒骄戒躁毕竟我还是个菜鸟,慢慢来。),搞完先让项目跑起来。(其实Struts2和springMVC并不会冲突,所以一些很旧的陈年老项目也经常能看见各种框架混用。)
- 整理Struts2的拦截器全部用springMVC重写,BaseAction改写为BaseController。
- 将类上@NameSpace全部替换为@Controller \n @RequestMapping;将方法上的@Action全部替换为@RequestMapping;所有action包名替换为controller;类的后缀Action全部替换为Controller。(这一步工程量比较大,幸好idea比较智能,修改类名能同时修改文件名和引用,然后项目里面还有很多action没有Namespace,得加@Controller,还有没有继承BaseAction的类添加继承,重构的时候就能发现咱项目管理的多么混乱(┬_┬),发现好多问题,类名小写之类的低级错误一大堆,没有强大的内心,接手改造这样的项目大概只想跑路)。
- 改造request和response还有Struts2 属性注入的传参方式springMVC用不了。(这一步也是大坑,没啥技术含量就是繁琐。request可以自动注入直接抽取到BaseController,response是绑定在方法的入参的,其实也可以写拦截器、AOP统一处理参数。因为我们项目接口千奇百怪的写法,所以我选择了最笨的办法一个一个类的改,再者,我还能改前端,实在别扭的就连前端的传参方式一起改了。耐心渐渐消失的时候就懒得给别人改bug了,不然真的做不完了,遗留问题不处理,以后还是坑……但是……🙊一把辛酸泪)
- 项目能正常