8
8
9
9
## UriAnnotationHandler的构成
10
10
11
- 这个类主要由两个功能 :
11
+ 这个类主要有两个功能 :
12
12
13
13
1 . 继承自` UrlHandler ` ,内部包含许多` PathHandler ` ,可以处理多个(Scheme+Host)的Uri。
14
14
2 . 加载` @RouterUri ` 生成的` UrlHandler ` ,并添加到其对应的` PathHandler ` 中。作为路由节点。
@@ -28,7 +28,7 @@ public class PathHandler extends UriHandler {
28
28
29
29
> 回顾一下一个uri的组成: Scheme + //: + Host + / + Path + (?) + QueryParams
30
30
31
- 其实浏览源码,我并没有看到太多设置path prefix的使用,因此这里简单了理解为 ` PathHandler ` 就是` UriHandler ` 的集合,可以通过` register() ` 来注册一个` UriHandler ` , 这个` UriHandler ` 就会以` path ` 为key, 它(` UriHandler ` )为value,放入map中:
31
+ 其实浏览源码,我并没有看到太多设置path prefix的使用,因此这里简单的理解为 ` PathHandler ` 就是` UriHandler ` 的集合,可以通过` register() ` 来注册一个` UriHandler ` , 这个` UriHandler ` 就会以` path ` 为key, 它(` UriHandler ` )为value,放入map中:
32
32
33
33
```
34
34
//注册一个 UriHandler, key为路由的path
@@ -84,7 +84,7 @@ public class PathHandler extends UriHandler {
84
84
85
85
即根据` UriRequest ` 的path获取对应的UriHandler,处理这个uri。
86
86
87
- 继续看` UriAnnotationHandler ` 。
87
+ > 继续看` UriAnnotationHandler ` 。
88
88
89
89
这个类也有一个map,其类型为Map<String, PathHandler>。 key是` Scheme://Host ` 。它也提供一个` register() ` 方法来添加` PathHandler ` :
90
90
@@ -114,20 +114,20 @@ public class PathHandler extends UriHandler {
114
114
即根据` UriRequest的 scheme+host ` 获取对应的` PathHandler ` ,交由` PathHandler ` 处理,而` PathHandler ` 其实就是根据` Uri ` 的path,获取对应的` UriHandler ` 来处理这个` uri `
115
115
116
116
117
- ok上面我们大致知道了` UriAnnotationHandler ` 的组成,以及对于一个` UriRequest ` 它是如何处理的。 那么它的构成基础` UriHandler ` 是怎么注册的呢 ?
117
+ ok上面我们大致知道了` UriAnnotationHandler ` 的组成,以及对于一个` UriRequest ` 它是如何处理的。 那么它的构成基础` UriHandler ` 是怎么注册的呢?即如何添加到 ` PathHandler ` 中的呢?
118
118
119
119
## 路由节点的动态生成
120
120
121
121
上面分析后,我们知道` UriAnnotationHandler ` 提供了` register ` 方法来向其中注册` uri ` 。它会根据` uri ` 来生成对应的` UriHandler ` 。那么这些注册代码在哪里?怎么生成的呢?
122
122
123
- 我们先看一下如何在` WMRouter ` 中定义一个路由节点(即,如何给定一个Url,然后跳转到我们想要跳转的page)。在` WMRouter ` 中我们可以通过注解来定义路由的Page :
123
+ 我们先看一下如何在` WMRouter ` 中定义一个路由节点(即,如何给定一个Url,然后跳转到我们想要跳转的page)。在` WMRouter ` 中我们可以通过注解来定义可被路由的Page :
124
124
125
125
```
126
126
@RouterUri(scheme = "test", host = "channel1", path = "test_a")
127
127
public class TestAActivity extends BaseActivity
128
128
```
129
129
130
- 我们在代码中可以使用 ` Router.startUri(context, "test://channel1/test_a") ` , 跳转到我们定义的这个Activity。其实` Router.startUri() ` 的具体实现就是调用` DefaultRootUriHandler ` 的方法开始整个路由遍历 :
130
+ 我们在代码中可以使用 ` Router.startUri(context, "test://channel1/test_a") ` , 跳转到我们定义的这个Activity。其实` Router.startUri() ` 的具体实现就是调用` DefaultRootUriHandler ` 方法来开始整个路由节点的遍历 :
131
131
132
132
```
133
133
public static void startUri(Context context, String uri) {
@@ -153,7 +153,7 @@ public class UriAnnotationInit_xxx implements IUriAnnotationInit {
153
153
1 . 注册处理器: https://blog.csdn.net/jeasonlzy/article/details/74273851
154
154
2 . javaopet: https://blog.csdn.net/qq_18242391/article/details/77018155
155
155
156
- 使用上面这两个工具就可以生成上面的注册代码。因此,这两个技术就不在细看,不过你需要了解,不然接下来的不好理解 :
156
+ 使用上面这两个工具就可以生成上面的注册代码。因此,这两个技术就不在细看,不过你需要了解一下,不然接下来的内容不好理解 :
157
157
158
158
## 动态扫描注解,生成UriHandler注册代码
159
159
0 commit comments