Arouter
源码分析系列建议从最初开始阅读,全部文章请访问https://github.com/AlexMahao/ARouter
在之前分析拦截器时,发现拦截器的基础服务InterceptorService
是通过Providers
的方式构造实例对象的。于是以下进行Providers
的分析。
首先看一下InterceptorService
的相关声明类。
public interface InterceptorService extends IProvider {
/**
* Do interceptions
*/
void doInterceptions(Postcard postcard, InterceptorCallback callback);
}
定义InterceptorService
继承IProvider
类。
public interface IProvider {
/**
* Do your init work in this method, it well be call when processor has been load.
*
* @param context ctx
*/
void init(Context context);
}
InterceptorService
的最终实例化对象的声明如下:
@Route(path = "/arouter/service/interceptor")
public class InterceptorServiceImpl implements InterceptorService {
}
而最终的使用如下:
interceptorService = (InterceptorService) ARouter.getInstance().build("/arouter/service/interceptor").navigation();
那么这些是如何串联起来的呢。
逻辑分析
- 生成路由辅助类
- 加载辅助类
- 构造
InterceptorService
辅助类
辅助类生成
因为其用的也是@Router
注解,所以其的处理所以也在RouterProcessor
中。
在该类中有如下代码:
if (types.isSubtype(tm, iProvider)) {
// IProvider
logger.info(">>> Found provider route: " + tm.toString() + " <<<");
routeMeta = new RouteMeta(route, element, RouteType.PROVIDER, null