引文
疫情在家的时候,找工作。面试的时候遇到让我看一个很老很老的框架。那时候我就意识到,不是所有的 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