ARouter源码分析(三)—— Provider源码分析

本文深入探讨ARouter的Provider模块,从逻辑分析、辅助类生成、加载辅助类到构造实例对象的过程。分析了如何通过注解处理生成路由辅助类,并详细解释了如何根据接口查询子类实现,以及在不同场景下如何构造和实例化对象。内容涵盖了Provider的生命周期和关键方法,对于理解ARouter的工作原理极具参考价值。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值