前言
到现在为止,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