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

Posted by Sinsy on September 14, 2020 About 2 k words and Need 7 min

引文

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

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

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

生命周期

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * @author impactCn
 */
public abstract class BaseLifeCycle {


    public void init() throws Exception{}

    public void start() throws Exception{}

    public void stop() throws Exception{}

}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 * @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;
    }
}

监听器

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/**
 * @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