ARouter介绍
- AutoWired注解:标记需要自动注入的参数
- Route注解:标记页面为路由节点
- Interceptor注解:标记一个类为拦截器,在路由过程中实现按需拦截
- IProvider接口:配合Route注解暴露服务供其他模块调用。实现跨模块调用的能力
- RouteProcessor:编译时扫描被Route注解标记的类,将路由信息收集起来,按照模块和路由组的划分写入相应的文件中
- AutowiredProcessor:编译时扫描被AutoWired注解标记的字段和所在的类,将字段和类一一对应的收集起来,然后写入文件。该文件就是在运行阶段拿来实现参数自动注入工作的类。
- InterceptorProcessor:编译时扫描被Interceptor注解标记的类,将模块下所有拦截器的类相关信息收集起来,写入文件
ARouter基本用法
ARouter编译时原理分析
RouteProcessor扫描当前模块下标记了@Route注解的类,识别注解标记类的类型是什么(如Activity,Broadcast,Provider,Service, ContentProvider,Fragment),将类的关键信息包装成RouteMeta对象,并且按照路由组的概念分别存储到groupMap的集合当中,最后遍历groupMap生成当前模块下的路由组文件(
ARouter$$Group$$groupName
),当前模块下路由的根节点源文件(ARouter$$Root$$app
),当前模块下对外暴露服务的Provider源文件(ARouter$$Providers$$app
),如果开启了生成文档的开关,还会生成当前模块的路由Json描述文件InterceptorProcessor扫描当前模块下标记了@Interceptor注解的类,然后把拦截器的优先级、名称、class对象信息写入
ARouter$$Interceptors$$app
这个文件AutowiredProcessorr扫描当前模块下标记了@AutoWired注解的所有的字段,然后解析每个字段的名称和数据类型,生成能够从Intent读取参数并且给该字段赋值的源文件。