CN111190577B - 一种对工具包统一管理并实现轻量级mvc的框架构建方法 - Google Patents

一种对工具包统一管理并实现轻量级mvc的框架构建方法 Download PDF

Info

Publication number
CN111190577B
CN111190577B CN201911315660.8A CN201911315660A CN111190577B CN 111190577 B CN111190577 B CN 111190577B CN 201911315660 A CN201911315660 A CN 201911315660A CN 111190577 B CN111190577 B CN 111190577B
Authority
CN
China
Prior art keywords
module
request
database
cache
mvc
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201911315660.8A
Other languages
English (en)
Other versions
CN111190577A (zh
Inventor
贠学文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN201911315660.8A priority Critical patent/CN111190577B/zh
Publication of CN111190577A publication Critical patent/CN111190577A/zh
Application granted granted Critical
Publication of CN111190577B publication Critical patent/CN111190577B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开一种对工具包统一管理并实现轻量级MVC的框架构建方法,包括三大模块分别为PLUGIN模块、SOA模块与PRODUCT模块;PLUGIN模块主要是面向功能的模块;所述SOA模块为替代spring、springMvc、Hibernate、myBatis的框架;所述PRODUCT模块为PLUGIN模块的升级,所述PRODUCT模块主要是面向业务,本框架的PLUGIN模块和PRODUCT模块可以有效的对第三方工具包做统一管理,实现了业务代码与工具包的完全解耦。而SOA‑MVC模块提供了更轻量级的操作,无论从用户的学习成本、用户的使用,还是后台实现逻辑,相比Spring、Hibernate、mybatis等,都会更加简单,从而一定程度上提高开发效率。

Description

一种对工具包统一管理并实现轻量级MVC的框架构建方法
技术领域
本发明涉及计算机软件编程技术领域,具体是涉及一种对工具包统一管理并实现轻量级MVC的框架构建方法。
背景技术
在开发一个项目时,都是很多人协同开发,如果在项目中需要用到第三方工具包,例如json工具包,可能有人会导入阿里的fastJson,有人会导入谷歌的gson,这样会对代码管理带来很多麻烦。而且这些工具包对代码的侵入性很强,如果想把一款工具包换成实现类似功能的另一款工具包,需要去修改大量代码,像Spring、SpringMvc、Hibernate、Mybatis这些开源框架,过于重量级,重量级的原因有以下两点(1)这些框架都提供了很多功能,但是有很多功能在工作中都是不太适用的或者用不到的。而这些功能的存在,会带来一下三个问题:1.1用户对框架的学习成本会增加。1.2会增加框架的复杂性,使框架出现bug的几率增加。1.3用户在使用这个框架时,需要配置是否使用此功能,这样也会为用户的使用带来复杂性。(2)后台实现逻辑的复杂性。由于后台实现逻辑的复杂,当在使用中遇到一些问题的时候,会很难定位这些问题产生的原因。
因此,目前亟需有一款更轻量级的框架,在特定的场景下,可以替代这些比较重量级的开源框架。
发明内容
为了解决以上问题,本发明提出了一种对工具包统一管理并实现轻量级MVC的框架构建方法,包括三大模块分别为PLUGIN模块、SOA模块与PRODUCT模块;
所述PLUGIN模块为一类实现了共通功能的工具包,抽象出来一个接口,让每一个工具包都各自作为自己的一个服务端去实现这个接口,在用一个客户端这个客户端中存放了接口的一个引用,用户可以利用这个客户端中的引用,去调用这个接口中提供的方法,PLUGIN模块主要是面向功能的模块;所述SOA模块为替代spring、springMvc、Hibernate、myBatis的框架;所述PRODUCT模块为PLUGIN模块的升级,所述PRODUCT模块主要是面向业务,除了具有PLUGIN模块的功能之外,还可以接收用户从前端提交过来的请求,并通过MVC的路由的转发,直接转发到对应的server端的包里,并处理请求;
具体采用以下方法:
(1)基于约定大于配置原则,基本实现零配置;
(2)路由的分发:基于servlet3.1的异步非阻塞功能,通过自定义注解,系统启动时会扫描被注解标记的方法,然后就注解的元数据信息与方法的元数据信息封装到一个JLFMVCRouteTarget对象,并以注解中的url为key,JLFMVCRouteTarget对象为value,存储到Map中,当请求到来时,会根据请求的url去map中查找对应的处理方法,处理请求后响应给用户;
(3)提供多数据库之间的事务管理:定义ThreadLocal变量,在ThreadLocal存放一个Map,Map中的key为当前线程已打开数据库事务的对应的数据库名称,value为对应的connection对象。然后对connection对象上加上allowCommit的bollean属性,这个属性初始化为false,当一个提交请求到来时,要传来数据库名称的参数,然后去遍历Map,看除当前数据库名称对应的connection对象以外,其它所有的connection对象的allowCommit属性是否都为true,如果有一个不是true,就把当前的connection属性变为true,然后直接返回,如果所有的都为true,就依次的将connection全部提交;
(4)集成缓存框架,并提供对数据库id黑名单管理,防止缓存穿透;
(5)封装ORM关系映射;
(6)实现了bean容器的管理以及依赖注入:通过自定义注解,把需要被容器管理的来用注解标注,系统启动时,会扫描这些被注解标注的类,并采用策略模式,生成对象,并将对象放入容器。然后遍历该类的所有字段,查看字段的类型是否被注解标注,如果被注解标注,则去容器中查找该类型对应的对象,如果没有找到,则去生成此对象并放入容器,最后将该对象赋值给该字段;
(7)可以通过实体类,导出相应的sql脚本和数据字典:根据注解信息进行导出;
(8)可以导出每个请求的请求参数、验证规则、响应参数等信息,方便前后端的协作开发:根据注解信息进行导出。
进一步的,所述缓存穿透有以下两种情况:一是用户做恶意攻击,一直拿数据库中都没有的id去查,这样每次都会穿透缓存;二是对于数据库中有的id,但是缓存中没有,这时如果查询此id的请求大并发过来,仍会穿透缓存,针对第一种情况,在实体的父类中添加isBlack属性,此属性初始化都为false,然后在数据库中如果查询id不存在,就新建一个实体对象,此时这个对象其它属性为空,只有isBlack属性不为空,并存到缓存,在下一次查询此id请求过来时,会在缓存中查询到该对象,然后在判断该对象的isBlack属性为true,则返回null。针对第二种情况,在缓存中查询不到时,会利用redis的setnx方法创建锁,只有创建锁成功的线程才可以访问数据库,并将查询结果回写至redis,对于没有创建锁成功的线程,会一直做自旋,直到第一个线程将结果回写至redis后,这时其它线程都可以从redis中获取结果,无需访问数据库。
采用上述技术方案,具有如下有益效果:
本框架的PLUGIN模块和PRODUCT模块可以有效的对第三方工具包做统一管理,实现了业务代码与工具包的完全解耦。而SOA-MVC模块提供了更轻量级的操作,无论从用户的学习成本、用户的使用,还是后台实现逻辑,相比Spring、Hibernate、mybatis等,都会更加简单,从而一定程度上提高开发效率。
附图说明
图1为本发明的架构图;
具体实施方式
下面结合附图对本发明做进一步说明。
实施例1:根据如图1所示一种对工具包统一管理并实现轻量级MVC的框架构建方法,包括三大模块分别为PLUGIN模块、SOA模块与PRODUCT模块;
所述PLUGIN模块为一类实现了共通功能的工具包,抽象出来一个接口,让每一个工具包都各自作为自己的一个服务端去实现这个接口,在用一个客户端这个客户端中存放了接口的一个引用,用户可以利用这个客户端中的引用,去调用这个接口中提供的方法,PLUGIN模块主要是面向功能的模块;所述SOA模块为替代spring、springMvc、Hibernate、myBatis的框架;所述PRODUCT模块为PLUGIN模块的升级,所述PRODUCT模块主要是面向业务,除了具有PLUGIN模块的功能之外,还可以接收用户从前端提交过来的请求,并通过MVC的路由的转发,直接转发到对应的server端的包里,并处理请求。
本发明中的PLUGIN模块:将一类实现了共通功能的工具包,抽象出来一个接口,然后让每一个工具包都各自作为自己的一个服务端,去实现这个接口,然后在用一个客户端,这个客户端中存放了接口的一个引用,用户可以利用这个客户端中的引用,去调用这个接口中提供的方法。
虽然有客户端和服务端的概念,但是并不需要做远程调用,每个客户端和服务端都只是一个普通的jar包,用户在编译代码时,只需要依赖客户端即可以完成编译,无需关注服务端基于什么实现,在启动项目前,将对应的服务端包导入到项目中即可,在项目启动的过程中,会自动扫描项目中依赖的所有客户端,然后针对于每个客户端,在去扫描这个客户端对应的服务端,在服务端中找到接口的实现类,然后启动服务,并把实现类对象赋值给客户端中的引用。
如果想把一款工具包换成另外一款实现同样功能的工具包,也只需要替换对应的服务端包即可,无需对代码进行修改。
如果某个服务端的配置文件进行修改,无需重启整个系统,可单独对这个服务端进行重启,在集群模式下,无需对每一台都重启,在一台服务器重启成功以后,会以广播的形式通知到其它服务器,其它服务器接收到通知后,会自动进行重启。
本发明的SOA-MVC模块:SOA-MVC模块可以替代spring、springMvc、Hibernate、myBatis这些框架,相对于这些开源框架,此mvc框架无论从用户使用,还是后台逻辑的实现,都会更加简单,更加轻量级。而且还实现了一些这些开源框架没有实现的功能。实现的功能如下:
2.1基于约定大于配置原则,基本实现零配置。
2.2路由的分发。
技术实现方案:基于servlet3.1的异步非阻塞功能。通过自定义注解,系统启动时会扫描被注解标记的方法,然后就注解的元数据信息与方法的元数据信息封装到一个JLFMVCRouteTarget对象,并以注解中的url为key,JLFMVCRouteTarget对象为value,存储到Map中,当请求到来时,会根据请求的url去map中查找对应的处理方法,处理请求后响应给用户。
2.3提供多数据库之间的事务管理。
技术实现方案:定义ThreadLocal变量,在ThreadLocal存放一个Map,Map中的key为当前线程已打开数据库事务的对应的数据库名称,value为对应的connection对象。然后对connection对象上加上allowCommit的bollean属性,这个属性初始化为false,当一个提交请求到来时,要传来数据库名称的参数,然后去遍历Map。
看除当前数据库名称对应的connection对象以外,其它所有的connection对象的allowCommit属性是否都为true,如果有一个不是true,就把当前的connection对象的allowCommit属性变为true,然后直接返回,如果所有的都为true,就依次的将connection全部提交。
2.4集成缓存框架,并提供对数据库id黑名单管理,防止缓存穿透。
缓存穿透有以下两种情况:
1、用户做恶意攻击,一直拿数据库中都没有的id疯狂去查,这样每次都会穿透缓存。
2、对于数据库中有的id,但是缓存中没有,这时如果查询此id的请求大并发过来,仍会穿透缓存。
技术实现方案:针对第一种情况,在实体的父类中添加isBlack属性,此属性初始化都为false,然后在数据库中如果查询id不存在,就新建一个实体对象,此时这个对象其它属性都为空,只有isBlack属性为空,并存到缓存,在下一次查询此id请求过来时,会在缓存中查询到该对象,然后在判断该对象的isBlack属性是否为true,则返回null。针对第二种情况,在缓存中查询不到时,会利用redis的setnx方法创建锁,只有创建锁成功的线程才可以访问数据库,并将查询结果回写至redis,对于没有创建锁成功的线程,会一直做自旋,知道第一个线程将结果回写至reids后,这时其它线程都可以从redis中获取结果,无需访问数据库。
2.5封装ORM关系映射,比使用hibernate和mybatis更加简单。
技术实现方案:与mybatis相比,有两个好处,第一:不需要在对简单sql进行处理,在此框架中,简单sql都已经封装好,可直接用。第二:在对复杂sql做查询时,无需手写数据库字段与bean字段的映射管理,在此框架中,直接通过反射,对bean的字段赋值。
2.6实现了bean容器的管理以及依赖注入。
技术实现方案:通过自定义注解,把需要被容器管理的类用注解标注,系统启动时,会扫描这些被注解标注的类,并采用策略模式,生成对象,并将对象放入容器。然后遍历该类的所有字段,查看字段的类型是否被注解标注,如果被注解标注,则去容器中查找该类型对应的对象,如果没有找到,则去生成此对象并放入容器,最后将该对象赋值给该字段。
2.7可以通过实体类,导出相应的sql脚本和数据字典。
技术实现方案:根据注解信息进行导出。
2.8可以导出每个请求的请求参数、验证规则、响应参数等信息,方便前后端的协作开发。
技术实现方案:根据注解信息进行导出。
本发明的PRODUCT模块实际上就是对PLUGIN模块做了一次升级,因为PLUGIN模块主要是面向于功能,让程序开发者去使用。而PRODUCT模块主要是面向于业务,它除了具有PLUGIN的功能以外,还可以接收用户从前端提交过来的请求,并通过MVC的路由的转发,直接转发的对应的server端的包里,并处理请求。
提供比Spring、SpringMvc、Hibernate、Mybatis等等更加轻量级的开源框架,并提供对第三方工具包的统一管理。
以上描述了本发明的基本原理和主要特征,本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内,发明要求保护范围由所附的权利要求书及其等效物界定。

Claims (1)

1.一种对工具包统一管理并实现轻量级MVC的框架构建方法,包括三大模块分别为PLUGIN模块、SOA模块与PRODUCT模块;
所述PLUGIN模块为一类实现了共同功能的工具包,抽象出来一个接口,让每一个工具包都各自作为自己的一个服务端去实现这个接口,再用一个客户端存放接口的一个引用,用户利用这个客户端中的引用,去调用这个接口中提供的方法,PLUGIN模块主要是面向功能的模块;所述SOA模块为替代spring、springMvc、Hibernate、myBatis的框架;所述PRODUCT模块为PLUGIN模块的升级,所述PRODUCT模块主要是面向业务,除了具有PLUGIN模块的功能之外,还可以接收用户从前端提交过来的请求,并通过MVC的路由转发,直接转发到对应的server端的包里,并处理请求;
具体采用以下方法:
(1)基于约定大于配置原则,基本实现零配置;
(2)路由的分发:基于servlet3.1的异步非阻塞功能,通过自定义注解,系统启动时会扫描被注解标记的方法,然后就注解的元数据信息与方法的元数据信息封装到一个JLFMVCRouteTarget对象,并以注解中的url为key,JLFMVCRouteTarget对象为value,存储到Map中,当请求到来时,会根据请求的url去map中查找对应的处理方法,处理请求后响应给用户;
(3)提供多数据库之间的事务管理:定义ThreadLocal变量,在ThreadLocal存放一个Map,Map中的key为当前线程已打开的数据库事务对应的数据库名称,value为对应的connection对象,然后对connection对象加上boolean类型的allowCommit属性,这个属性初始化为false,当一个提交请求到来时,要传来数据库名称的参数,然后去遍历Map,判断除当前数据库名称对应的connection对象以外,其它所有的connection对象的allowCommit属性是否都为true,如果有一个不是true,就把当前的connection对象的allowCommit属性变为true,然后直接返回,如果所有的都为true,就依次的将connection全部提交;
(4)集成缓存框架,并提供对数据库id黑名单管理,防止缓存穿透;
(5)封装ORM关系映射;
(6)实现bean容器的管理以及依赖注入;
(7)通过实体类,导出相应的sql脚本和数据字典:根据注解信息进行导出;
(8)导出每个请求的请求参数、验证规则、响应参数信息,方便前后端的协作开发:根据注解信息进行导出;
所述缓存穿透有以下两种情况:
一是用户做恶意攻击,一直用数据库中不存在的id去查询,这样每次都会穿透缓存;
二是对于数据库中有的id,但是缓存中没有,这时如果查询此id的请求量大,仍会穿透缓存;
针对第一种情况,在实体的父类中添加isBlack属性,此属性初始化都为false,然后在数据库中如果查询id不存在,就新建一个实体对象,此时这个对象其它属性都为空,只有isBlack属性不为空,并存到缓存,在下一次查询此id请求过来时,会在缓存中查询到该对象,然后再判断该对象的isBlack属性为true,则返回null;针对第二种情况,在缓存中查询不到时,会利用redis的setnx方法创建锁,只有创建锁成功的线程才可以访问数据库,并将查询结果回写至redis,对于没有创建锁成功的线程,会一直做自旋,直到第一个线程将结果回写至redis后,这时其它线程都可以从redis中获取结果,无需访问数据库;
所述封装ORM关系映射中,简单sql都已经封装好,能够直接用;在对复杂sql做查询时,无需手写数据库字段与bean字段的映射管理,直接通过反射,对bean的字段赋值;
所述实现bean容器的管理以及依赖注入中,通过自定义注解,把需要被容器管理的类用注解标注,系统启动时,会扫描这些被注解标注的类,并采用策略模式,生成对象,并将对象放入容器,然后遍历该类的所有字段,查看字段的类型是否被注解标注,如果被注解标注,则去容器中查找该类型对应的对象,如果没有找到,则去生成此对象并放入容器,最后将该对象赋值给该字段。
CN201911315660.8A 2019-12-19 2019-12-19 一种对工具包统一管理并实现轻量级mvc的框架构建方法 Active CN111190577B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911315660.8A CN111190577B (zh) 2019-12-19 2019-12-19 一种对工具包统一管理并实现轻量级mvc的框架构建方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911315660.8A CN111190577B (zh) 2019-12-19 2019-12-19 一种对工具包统一管理并实现轻量级mvc的框架构建方法

Publications (2)

Publication Number Publication Date
CN111190577A CN111190577A (zh) 2020-05-22
CN111190577B true CN111190577B (zh) 2023-03-31

Family

ID=70710127

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911315660.8A Active CN111190577B (zh) 2019-12-19 2019-12-19 一种对工具包统一管理并实现轻量级mvc的框架构建方法

Country Status (1)

Country Link
CN (1) CN111190577B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114237774B (zh) * 2022-02-14 2022-05-31 北京华御数观科技有限公司 一种解除功能模块依赖的内部调用方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103745369A (zh) * 2014-01-14 2014-04-23 中航金网(北京)电子商务有限公司 基于b/s架构的零备件销售支持系统的数据管理方法及装置
CN105739987A (zh) * 2016-02-03 2016-07-06 成都四方伟业软件股份有限公司 面向SOA的快速构建JavaWeb应用的系统框架
CN105824619A (zh) * 2016-03-10 2016-08-03 四川交通职业技术学院 基于Spring MVC、Apache Shiro、MyBatis框架整合的代码生成器
CN109710248A (zh) * 2018-12-29 2019-05-03 江苏徐工信息技术股份有限公司 一种基于Web开发分模块框架的搭建方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
BR112015000480B1 (pt) * 2012-07-09 2023-02-07 Vid Scale, Inc Arquitetura de codec para codificação de vídeo de camada múltipla, método e sistema
US9229694B2 (en) * 2013-03-15 2016-01-05 Gamesys Ltd. Systems and methods for facilitating application development utilizing plugins

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103745369A (zh) * 2014-01-14 2014-04-23 中航金网(北京)电子商务有限公司 基于b/s架构的零备件销售支持系统的数据管理方法及装置
CN105739987A (zh) * 2016-02-03 2016-07-06 成都四方伟业软件股份有限公司 面向SOA的快速构建JavaWeb应用的系统框架
CN105824619A (zh) * 2016-03-10 2016-08-03 四川交通职业技术学院 基于Spring MVC、Apache Shiro、MyBatis框架整合的代码生成器
CN109710248A (zh) * 2018-12-29 2019-05-03 江苏徐工信息技术股份有限公司 一种基于Web开发分模块框架的搭建方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
J2EE开发常用框架;段兰;《信息与电脑》;20110430(第04期);全文 *

Also Published As

Publication number Publication date
CN111190577A (zh) 2020-05-22

Similar Documents

Publication Publication Date Title
CN108228166B (zh) 一种基于模板的后端代码生成方法及系统
US9231974B2 (en) Dynamic policy-based entitlements from external data repositories
US7200806B2 (en) System and method for generating pre-populated forms
US7725496B2 (en) System and method for identifying application resources
US20040230667A1 (en) Loosely coupled intellectual capital processing engine
JP5964027B2 (ja) ビジネスネットワーク管理発見およびビジネスネットワーク管理集約のためのシステムおよび方法
US7606792B2 (en) System and method for efficient evaluation of a query that invokes a table valued function
US20080263006A1 (en) Concurrent searching of structured and unstructured data
US7428756B2 (en) Access control over dynamic intellectual capital content
US20100250603A1 (en) System and Method of Performing Risk Analysis using a Portal
CN102567400B (zh) 一种实现Web访问的方法和Web服务器
EP3465436A1 (en) Extending object-schema-based application programming interfaces (apis)
CN106649488B (zh) 多数据源交互接口的调用方法及装置
US20210390006A1 (en) Method and electronic device for querying application programming interfaces of webpage
US20040230982A1 (en) Assembly of business process using intellectual capital processing
CN109145009B (zh) 一种基于SQL检索ElasticSearch的方法
US9373093B2 (en) Gateway service manager for business object applications
CN111190577B (zh) 一种对工具包统一管理并实现轻量级mvc的框架构建方法
CN115599386A (zh) 代码生成方法、装置、设备及存储介质
CN112256728B (zh) 一种基于虚实融合的数据空间构建方法及标识解析方法
CN113127906A (zh) 基于c/s架构的统一权限管理平台、方法及存储介质
CN106201542B (zh) 一种wof快速开发平台
WO2023125755A1 (zh) 基于大规模集群的服务请求处理方法、装置、设备及介质
US20040230567A1 (en) Integrating intellectual capital into an intellectual capital management system
CN107203594B (zh) 一种数据处理设备、方法和计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant