动手写个java快速开发框架-开篇

最近和家附近大学的一些大学生交流的比较多,他们对Java的基础知识,零散的框架知识都有所了解,但是对实际开发中的框架感觉很神秘,很多职场新人也是刚到公司对公司使用的开发框架也觉得很神秘,我会通过一个系列的文章从0到1实现一个java的快速开发框架,这个开源java框架的目的一个是帮助一些有一定开发基础想提高自己架构能力的同学,让大家知道框架是如何一步步搭建起来,又是如何一步步完善的,另一个目的是在社区再提供一个简单的快速开发框架的选择(虽然已经有很多了)。

首先开篇先介绍下整个开源框架包含哪些功能,这个开源框架的名字叫Mk Framework,任何一个开发框架其实都是对原油开发工程的一个抽象,抽象出后续其他类似项目也会用到的功能,这样可以方便后续类似的项目能够快速复用,快速开发,这个框架是我从之前开发的一些api网关中抽象出来的,在我的概念中目前主流的快速开发框架大都是从一个网关抽象出来的,只是附加功能和定制化功能的区别,就好像大众所有的车都来自于golf一样。这个框架最适合于为app或者小程序这类前端应用开发一个api服务网关,基本可以做到开箱即用,直接定义数据结构、开发controller接口就可以了。

下面介绍下框架的目录结构,从目录结构中也能一探功能范围,下面这个脑图就是总的package结构。

MK Framework

我分别介绍下每个模块和主要的实现技术,后续会在各个章节详细介绍每一块功能如何实现,如何用在后续项目中。整个框架中为了好区分框架部分和业务模块部分,比较粗暴的分成了common模块和modules模块,大家也可以把业务模块单独成一个工程,让这个业务工程依赖框架工程就好了,这里为了方便讲解和后续演示我就直接放在了一个工程里,实际开发的时候大家完全可以将框架单独打包成稳定的jar,然后各个业务子工程依赖于该框架工程即可,这样对于整个团队甚至公司的开发技术栈都是可以做到统一管理,统一控制,防止开发人员各用各的,之前呆过的几家公司都遇到过jar包混乱,技术栈混乱的问题,通过统一开发框架确实能够有效解决这个问题。好了人下面我们开始介绍下:

com.monkey01.common.annotation

annotation包中存放的主要是我们用到的注解,这个框架中自定义注解不多,后续大家可以在这个包中定义自己框架中用到的注解,框架中我会抽象几个用的比较多的功能注解。

com.monkey01.common.aspect

aspect包中主要用来存放切面类,主要实现一些切面类例如系统日志切面类、redis缓存切面类、网络请求统一处理切面类等等,一些切面拦截器和过滤器也放在这个package中。

com.monkey01.common.exception

exception包中主要是定义了自定义Exception类,对于自定义异常类可以根据需要细分不同的粒度,框架里我只会设计一个统一的自定义异常类,如果大家需要细分异常,可以自己再设计一些细粒度的Exception类。同时该包中还会包含ExceptionHandler统一异常处理类,用来对具体服务类抛出的异常进行统一异常处理,这样可以避免各类异常处理分布在各个业务类角落,造成后续维护困难。

com.monkey01.common.domain

domain包在框架common包和业务模块包中都会存在,common包中的domain主要是用来存放框架用到的公共BO、DO类。

com.monkey01.common.context

context包中主要用来存放整个应用的全局context信息,在Context中可以存放自己定义的上下文公共数据。

com.monkey01.common.utils

utils包名顾名思义就是存放我们常见的util类,因为目前有很多优秀的util类,这里也就不再重复造轮子了,搜集了一些比较好的util库,框架里主要用的是vjtool-vjkit唯品会开源的util库,还有hutool,hutool也是一个比较好的开源util类库,常用的util基本都有,一个百宝工具箱。

com.monkey01.common.safe

safe包里面放的主要是安全相关的类,目前任何一个系统都要有安全防护,不然上线后很容易被各种攻击,框架中做了接口上送参数校验相关类、防各类xss攻击类、各类加解密类、jwt token生成校验类,目前的版本不会加入shiro后续会根据网友的反馈看是否要加入,毕竟shiro还是稍微有点重了,对于一般的服务网关用不上。在这里我还会开源目前用在我很多生产项目中的app和服务端的一次一密的动态报文加密模块。

com.monkey01.common.cache

cache包中主要是对java自带的hashmap、concurrentHashMap、guava、redis进行了多级缓存的封装,基本可以满足日常的要求。

com.monkey01.common.db

db包基本没有做封装,直接使用了mybatis plus库,这个库基于mybatis开发,是目前我用下来最好的orm框架库,能够大大提高开发效率,同时也包含了bean、mapper、service、controller的基础类自动生成功能,还是挺方便。

com.monkey01.common.monitor

监控对于一个单机系统的作用不是那么大,但是对于一个分布式的集群系统来说监控是非常重要的一个模块,通过监控能够第一时间了解到系统当前的瓶颈和问题所在。目前开源的微服务监控组件有很多,很多我都用过,springcloud大礼包中的sluenth、zipkin、turbine功能都太简单,而且功能不够聚合,点评开源的CAT对于原有代码侵入性又太强,所以这里推荐使用韩国人开源的pinpoint,pinpoint也是目前github上最火的微服务全链路监控项目,pinpoint不但对代码侵入性小而且使用起来也足够稳定。

com.monkey01.common.limit

limit包主要是放限流功能模块,这里我们项目中使用的限流是Netflix开源的Hystrix,Hystrix的限流和熔断功能是比较全面的,而且底层使用的是线程池限流方案,整体比较稳定,之前我也压测过性能是能满足要求的。

com.monkey01.common.config

config包很好理解,就是存放一些相关的config类。

整个快速开发框架主要是有这些模块组成,其中核心的内容在后续的文章中会陆续进行讲解,本篇先给大家一个全貌的概览,这个快速开发框架能够快速完成一个前后端分离系统的后端服务部分,能够快速完成接口开发和对前端开放。整个框架设计的核心思路就是复用现有的成熟框架,做一定的定制开发再按需组合成一个适合自己的快速开发框架,整个专栏更新频率大概一周1-2篇,在整个专栏结束后,希望大家也都能开发出属于自己的开发框架。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容