这是一个关于某框架起源的故事

大概是在2012年的 上半年,那会儿我已经学java有一段时间了,学校开始教我们当时比较流行的三大框架(struts2,spring,hibernate),在学之前我们老师为了让我们更加的了解底层,就带我们写过一个简易的struts2,以及一个简易的jdbc封装,就是从这一刻开始,让我开始了追逐真相的道路。

尝试自己写框架

有了老师的启蒙,加上之前积累的java知识,我很快就在脑海里推演出了struts2的大概原理,但是我不知道到底对不对,按照我的这个推演 到底能不能真的实现出类似的功能。

于是,说干就干,我开始了第一段追逐真相的行动,经过一段时间的努力,果然,我实现了一个类似的框架,当时取名叫EasyMVC,但是 也仅仅只是用来检测我的推断的,并没有当做一个开源项目,更没有发布出去,因为那会儿还不知道开源这回事。

后来我又接着写了一个类似Mybatis的框架,叫EasyJDBC,同样没有发布。

故事到这就告一段落了,在之后的一段时间里,我都没有再去做过类似的事情,直到多年以后。

初次尝试AOP,IOC

时间来到了 2017年,我当时也不知道怎么回事,突然有一种冲动吧,我就在想 我实现过MVC框架,实现过JDBC框架,但是唯独没有尝试过AOP和IOC,于是我再次投入到 框架的开发中,一样现在脑海里推演出大概原理,然后去验证它对不对。

后来我索性就写出了一个全栈框架,包含MVC,AOP,IOC,JDBC,当时是完全模仿spring的,需要在web.xml里配监听器,配servlet,还需要手工导入很多jar包 才可以用,非常的繁琐。

我还拿他当过作品投递给某大厂,可惜收不到回音,因为实在是太简单了,做得不好,仅仅只是算是一个练手的项目吧。

SpringBoot横空出世

那一年,SpringBoot横空出世,席卷整个IT界,几乎掀起了一阵换框架的风潮,因为他太简洁了,连tomcat都内置了。 恰恰就是这个内置tomcat,让我激起了兴趣。

我开始去研究 tomcat是怎么内置进来的,但我一直找不到资料,因为实在是太少了,后来我想到可以用netty,就这样,经过了一阵子,一个内置netty的全栈开发框架诞生了,当时一样延续了之前的风格,取名叫Easy-Framework。

但是这个框架一样做的很简单,仅仅是练手项目。但是我实在是舍不得丢弃,就把代码传到了github,保存了下来。

正式的开源项目

代码保存了下来,就有了地基,我这个人比较喜欢多想,每次遇到点新鲜事总会去思考他是怎么实现的,然后会去试一下到底对不对。

而刚好又有了这个地基在这,于是我就开始漫长的迭代之路,每次有了新想法就会加进去,一点点的迭代,项目越来越完善,而刚好git又流行了起来。

自己的git熟练度越来越高,项目也越来越完善,于是就干脆作为一个正式的开源项目来做了。

项目大换血

自从决定作为开源项目来做以后,我就定了几个计划。

  • 项目必须要认真做,起码代码要干净整洁
  • 使用起来必须很方便,尽量不要增加学习成本
  • 要有自己的官网

为了做到上面三点,整个项目都来了一次大换血,经过了好几轮迭代,才形成了现在的样子。

先把所有代码都review了一遍,做了一次整理,对模块的划分也做了大改动,使其更加合理。

同时内置的netty由于太基础了,不堪重负,在http的这个场景下很多东西需要自己实现,于是干脆换成了内置tomcat,后来直接去掉了内置容器,丢弃了Servlet,直接采用JRE类库的内置API实现的http服务。

JDBC模块,也进行了大改,不再模仿Mybatis,取消了XML里写SQL的做法,改用了注解开发,基本的单表操作 几乎不需要写任何SQL,同时也支持多数据源。

声明式API的出现

怀着极简的中心思想,对任何东西都尽量做减法,于是我把Controller去掉了,取而代之的是一个interface,为了应对没有Controller的尴尬,我做了很多事情来增强体验,比如 提供参数校验功能,对象接参更加的人性化,丢弃转发和重定向(现在是前后端分离时代)等一系列的措施吧,起码目前为止,我个人认为 这种方式比较优雅。

但同时,依然保留了对传统Controller的兼容。


到目前为止,这个项目已经挺过了最艰难的时刻了,该有的东西都有了,我们甚至有了自己的分布式中间件,接下来我们还会继续推出更多的生态,并且还会继续完善这个项目。

哦,对了这个项目叫Mars-Java

官网:www.mars-framework.com/

微博:@个人开发者-俞晔

猜你喜欢

转载自juejin.im/post/5efb54246fb9a07e6b073ac9