组件化学习(3)ARouter中的Path和Group注解

这里就不对ARouter进行全面分析了,而是把Group和Path的思想抽象出来理解

1.介绍下Group和Path

在上一篇文章中也提到过,Group就是组,Path就是组里面具体的类。在ARouter的api模块中,有针对GroupPath的接口ARouterGroupARouterPath。如下(这里只是举个例子,并不一定真有同名接口,但是思想是一样的)

public interface ARouterGroup {
    Map<String, Class<? extends ARouterPath>> getGroupMap();
}
  • ARouterGroup接口:
    有一个Map集合,key,就是各个组名,比如appcommon等等。value就是每个组名对应的详情类。其实就是实现了ARouterPath接口的类.
  • ARouterPath接口:
public interface ARouterPath {
    Map<String, RouterBean> getPathMap();
}

这里的key就是Pathvalue就是与Path相对应的,被RouterBean封装了的class对象。比如key/app/MainActivityvalue就是RouterBean<MainActivity.class>

RouterBean就是这样的,其中被框起来的就是Class对象。可以理解成对Class对象的封装在这里插入图片描述

2.Path和Group的工作原理

注意: 先有Path的接口ARouterPath,再有Group的接口ARouterGroup,因为Group要遍历使用Path

说到这里,可能还是对ARouterGroup接口,ARouterPath接口不太熟悉。我在这里把具体实现的效果拿过来,就好理解多了

在具体实现的时候,即利用JavaPoet生成类文件的时候
①要首先生成,实现了ARouterPath接口的类。不同的group有不同的实现类。比如app组就对应一个ARouterPath的实现类,里面也有一个Map集合,key可以是app组里面所有的Pathvalue就是与Path对应的RouterBean
②然后生成实现了ARouterGroup接口的类。这个类也是一个组对应一个,相当于一个模块对应一个路由表。key就是不同的组,value就是不同的组对应的ARouterPath的实现类。

假如目前只有两个业务模块,即order和personal,则
①生成的实现ARouterPath接口的类的具体代码实现如图所示

order模块生成的,里面的Map集合存储了order模块所有的path
在这里插入图片描述
personal模块生成的
在这里插入图片描述

②生成的实现ARouterGroup接口的类的具体代码实现如图所示

order板块生成的,里面存储了所有可能用到的模块对应的实现了ARouterPath的Class对象在这里插入图片描述personal板块生成的>

ARouterManager是全局的,是用来缓存ARouter$$GroupARouter$$Path

需要通信的时候,比如order模块要向personal模块通信,我认为就需要找全局的ARouterManager里面有没有缓存的ARouter$$Group$$personal,如果有,就直接利用缓存的ARouter$$Group$$personal,找到ARouter$$Path$$personal.class,然后再得到目标类的 RouterBean对象,即得到了目标类的class对象,进行通信,如果没有,就把编译后就生成的ARouter$$Group$$personal类和ARouter$$Path$$personal添加到ARouterManager里面(即懒加载),然后再完成跳转
代码描述就是这样:
ARouter$$Group$$personal.getGroupMap().get("personal").get("targetClass")

ARouter的参数传递,也是类似的思想,和ButterKnife也很像。就是在需要传递的参数定义上面加上注解,然后编译的时候生成特定的类的类文件,这个类文件的作用就是可以使用Bundle,给对应的类的这些参数赋值

我所理解的Path和Group原理就是这样。具体的生成这些类文件的JavaPoet代码,我还没有进行详细学习,等后面用到的时候再学习吧,现在先掌握思想。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值