ARouter源码解析(三)

本文详细解析了ARouter的依赖注入实现原理,包括@Autowired注解的使用,如何通过_ARouter的inject方法,以及AutowiredService和ISyringe接口的角色。重点介绍了依赖注入内部使用反射赋值,并强调了@Autowired注解的字段不能为private。此外,还提到了SerializationService在json序列化中的作用,以及官方提供的JsonServiceImpl实现。文章结尾提到ARouter的gradle-plugin和compiler部分尚未解析。
摘要由CSDN通过智能技术生成

前言

到现在为止,ARouter 还有最后的依赖注入还没有解析过,那么今天就来深入探究一下其实现原理。

PS : 因为依赖注入的原理还比较简单,所以本篇篇幅会较短。

@Autowired解析

想要用 ARouter 实现依赖注入,需要在 Activity/Fragment 中加上

ARouter.getInstance().inject(this);

那么我们这个代码就成为了我们分析的入口了。

public void inject(Object thiz) {
    _ARouter.inject(thiz);
}

ARouter 内部还是调用了 _ARouter 的 inject 方法。

static void inject(Object thiz) {
    AutowiredService autowiredService = ((AutowiredService) ARouter.getInstance().build("/arouter/service/autowired").navigation());
    // 如果 autowiredService 不为空,完成依赖注入
    if (null != autowiredService) {
        autowiredService.autowire(thiz);
    }
}

发现依赖注入和拦截器很相似,都是利用服务组件来完成的。依赖注入的服务组件叫 AutowiredService ,跟踪可以发现,它的实现类是 AutowiredServiceImpl 。

@Route(path = "/arouter/service/autowired")
public class AutowiredServiceImpl implements AutowiredService {
    private LruCache<String, ISyringe> classCache;
    private List<String> blackList;

    @Override
    public void init(Context context) {
        classCache = new LruCache<>(66);
        blackLis
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值