我的产品开发之旅(5) - 使用Spring MVC搭建API平台

来源:互联网 发布:网络基础哪本书好 编辑:程序博客网 时间:2024/06/05 01:58

前阵子在忙办房子按揭的事情,跑了一个多星期,终于弄完回来更新了。


环境的配置、如何使用 IntelliJ IDEA 创建Spring MVC的项目在此我就不细说了,网上有很多好的文章。

比如这篇:使用IntelliJ IDEA开发SpringMVC网站(一)开发环境


需要注意的是,使用 IntelliJ IDEA 的时候,不能使用社区版,社区版没有创建web项目相关的功能,需要安装付费版本。在线激活地址可以在评论中问我要。



按照推荐文章项目创建成功后,由于使用了Maven来构建项目,会自动生成 pom.xml 文件,此文件的作用在于管理项目引用的第三方包和Maven的配置。(Maven还有很多强大的功能,但我只会用这一项......)


设置自动下载第三方包



我们将第三方包的Maven标准引用代码粘贴到 <dependencies> </dependencies> 标签中,Maven会自动下载此第三方包,并引用到项目中。



Maven引用库地址:Search/Browse/Explore

进入该地址,在搜索框中输入:Gson



选择一个用的比较多的版本。




复制红框中的代码,粘贴到项目的 pom.xml<dependencies> </dependencies> 中。


项目创建完成,可以开始做项目的架构了。



项目架构图


使用经过改造的简单工厂模式做为项目的框架。



根据项目架构图,创建相应的类库:





从下往上讲解应该比较好。


数据访问接口层(dao)

这一层装载着项目所有数据访问接口类。

这一层主要介绍IBaseDao接口类,用于基础的,固定的数据表操作接口定义。其他接口类可以根据业务需求继承此类,这样不必每次都重复创建相同的接口。

每个接口类都是使用 <T> 泛型参数传递,大大增加了接口的通用型



ISortDao一级分类表数据访问接口类,继承IBaseDao)


......



数据访问实现层(daoImpl)

这一层装载着项目所有数据访问实现类。

这一层主要介绍BaseDaoImplDB类,连接数据库的操作在此封装,接口实现类可以继承此类,调用里面封装好的连接数据库方法。



SortDapImpl一级分类表数据访问实现类,继承BaseDaoImplDB类)


......



业务逻辑接口层(service)

这一层装载着项目所有业务逻辑接口类。

和数据访问接口层一样,这一层创建了一个IBaseService接口类,用于基础的,固定的数据表操作接口定义。其他接口类可以根据业务需求继承此类,这样不必每次都重复创建相同的接口。



IBaseServer一级分类表逻辑接口类,继承IBaseService类)


......



业务逻辑实现层(serviceImpl)

这一层装载着项目所有业务逻辑实现类。

创建一个BaseServiceImpl类,用于将dao层所有接口类初始化在此封装,逻辑层实际处理类可继承或实例化后调用此类封装好的方法。



IBaseServer一级分类表逻辑实现类,继承BaseServiceImpl类)




VerSignsImpl(请求验签过滤器 ,考虑到不能让每个人都能请求我的接口,所以在请求接口的时候需要经过验签这一流程后才能调用逻辑层。

验签方式:MD5(appKey + appSecret + 时间戳),时间戳转换的时间和服务器时间不能超过一分钟。

验签成功后,通过反射的方式调用相应的接口方法。



反射实现方法:


/** * 利用反射调用相应的方法/接口 * @param service  = 已经实例化的接口类 * @param function = 需要执行的逻辑方法名称 * @param data     = 参数包 */private <T> Object setServiceEntryway(T service, String function, T data) {    Object result = JsonUtils.getUtils().toJson(            SetResultModelUtils.getResult().setResult(ResultState.FAILURE, "请求异常!"));    try {//获取相应class        Class cls = service.getClass();        //利用反射方式获取相应的方法(非静态)        Method method = cls.getMethod(function, Object.class);        //执行获取到的方法        result = method.invoke(service, new Object[]{data});    } catch (InvocationTargetException e) {        e.printStackTrace();    } catch (IllegalAccessException e) {        e.printStackTrace();    } catch (NoSuchMethodException e) {        e.printStackTrace();    }return result;}


调用方式:

VerSignsImpl.getVerSigns().serviceEntryway(new 接口,"方法名称",参数数据);

......



API接口控制层(controller)

这一层装载着所有API接口的控制、定义。

BaseInitService(统一逻辑接口初始化类),用于将Service层所有接口类初始化在此封装,接口定义类可继承或实例化后调用此类封装好的方法。




SortController(一级分类表API接口定义类)


......



数据实体模型层(model)

这一层装载着项目所有数据实体模型类。

BaseResultModel(数据模型固定类)固定的返回数据模板,请求返回统一按此模板返回数据。


......



公共工具层(utils)

这一层装载着项目所有公共工具类。

MainUtils(常用工具类),将常用到的通用小功能封装到工具类中,方便以后的使用。


......



公有层(global)

这一层装载着项目所有公共类,如业务状态码,秘钥等

ResultState(业务状态码),将返回状态码统一放到这个类中,便于调用和维护。


......



完整的代码我会抽时间上传到github上面,到时候会将地址贴出。

本章就到这里啦。

0 0
原创粉丝点击