写点什么

我是如何从 0 到 1 完成一个简单的中间件(1)

用户头像
sinsy
关注
发布于: 2020 年 09 月 16 日
我是如何从0到1完成一个简单的中间件(1)

引文



疫情在家的时候,找工作。面试的时候遇到让我看一个很老很老的框架。那时候我就意识到,不是所有的 Java 开发使用的框架是 mvc、Boot 、cloud 这类的主流的框架,有可能也是自研。



好在我也才毕业醒悟过来,看过很多书(安利广图,收藏书多、而且很多是最新的),同时我也挺喜欢造轮子。



所有的框架其实都是万变不离其宗,写一个 demo 级别的中间件,就是为了了解框架之间的最基础的原理以及组成。日后方便自己学习其他框架,快速上手,从源码里面。



生命周期



任何有机事物都有自己的生命周期,出生、发育、生长、死亡。



那么我们第一步是抽象出一个中间件的生命周期。



/**
* @author impactCn
*/
public abstract class BaseLifeCycle {
public void init() throws Exception{}
public void start() throws Exception{}
public void stop() throws Exception{}
}

生命周期每个阶段,我们都需要一个不同信息,让不同的人了解我们。所以我们还得加一个info()方法输出不同阶段的信息。



/**
* @author impactCn
*/
public abstract class BaseLifeCycle {
public void init() throws Exception{}
public void start() throws Exception{}
public void stop() throws Exception{}
public String info() {
return null;
}
}

监听器



只是一个生命周期来定义一个框架是不够的。人生也不都是按部就班,也有许许多多的意外、巧合组合而成,构成一个缤纷的人生。



对其生命周期监听。使用观察者模式以及适配器模式,增强生命周期的各个阶段。



/**
* @author impactCn
*/
public interface LifeCycleListener {
void beforeInit(BaseLifeCycle server) throws Exception;
void afterInit(BaseLifeCycle server) throws Exception;
void beforeStart(BaseLifeCycle server) throws Exception;
void afterStart(BaseLifeCycle server) throws Exception;
void beforeStop(BaseLifeCycle server) throws Exception;
void afterStop(BaseLifeCycle server) throws Exception;
}
/**
* @author impactCn
*/
public abstract class BaseLifeCycle {
public void init() throws Exception{}
public void start() throws Exception{}
public void stop() throws Exception{}
public String info() {
return null;
}
/**
* 监听器
*/
LifeCycleListener lifecycleListener;
public void setLifecycleListener(LifeCycleListener lifecycleListener) {
this.lifecycleListener = lifecycleListener;
}
}
/**
* @author impactCn
*/
public class BaseLifeCycleAdapter implements LifeCycleListener {
@Override
public void beforeInit(BaseLifeCycle server) throws Exception {
}
@Override
public void afterInit(BaseLifeCycle server) throws Exception {
}
@Override
public void beforeStart(BaseLifeCycle server) throws Exception {
}
@Override
public void beforeStop(BaseLifeCycle server) throws Exception {
}
@Override
public void afterStart(BaseLifeCycle server) throws Exception {
}
@Override
public void afterStop(BaseLifeCycle server) throws Exception {
}
}

最后



自此完成一个简单的生命周期抽取,之后会不定期更新这个简单中间件框架。



项目地址



Github:https://github.com/impactCn/edward-elric 感觉有点帮助,请给我一个star。非常感谢。



声明



作者: Sinsy

本文链接:https://blog.sincehub.cn/2020/09/14/middleware-zero-to-one-1/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文声明。

如您有任何商业合作或者授权方面的协商,请给我留言:550569627@qq.com



发布于: 2020 年 09 月 16 日阅读数: 41
用户头像

sinsy

关注

还未添加个人签名 2019.10.18 加入

公众号:编程的那些年 个人博客网站:https://blog.sincehub.cn/

评论

发布
暂无评论
我是如何从0到1完成一个简单的中间件(1)