Arouter 注解
Route
@Route是Arouter中大家最常用的注解
public @interface Route {
String path();
String group() default "";
String name() default "";
int extras() default Integer.MIN_VALUE;
int priority() default -1;
}
再介绍下Warehouse,主要是装载了各种映射关系,比较简单
// 装载了所有的分组映射类,key是分组名,value是group映射的类名
static Map<String, Class<? extends IRouteGroup>> groupsIndex = new HashMap<>();
// 装载了所有的直接映射关系,各个分组内的详细的映射关系,value是path,value是RouteMeta
static Map<String, RouteMeta> routes = new HashMap<>();
// 装载了所有的服务提供者的映射,value是IProvider对应的class,value是对应的服务提供者,所以IProvider是单例,每一个类只有一个value
static Map<Class, IProvider> providers = new HashMap<>();
//服务提供者IProvider的映射,key是类名,value是RouteMeta
static Map<String, RouteMeta> providersIndex = new HashMap<>();
// 拦截器的映射,key为拦截器Interceptor的优先级,用的是UniqueKeyTreeMap,不允许有相同优先级的拦截器
static Map<Integer, Class<? extends IInterceptor>> interceptorsIndex = new UniqueKeyTreeMap<>("More than one interceptors use same priority [%s]");
//拦截器IInterceptor的列表
static List<IInterceptor> interceptors = new ArrayList<>();
里面有RouteMeta类的使用,下面在详细分析下RouteMeta
private RouteType type; // 路由类型,有ACTIVITY,FRAGMENT,PROVIDER等
private Element rawType; // 路由的原始类型
private Class<?> destination; // 目标类
private String path; // Path
private String group; // Group
private int priority = -1; // 优先级,值越小优先级越高
private int extra; // 可以用于做一些是否需要登陆需求,
private Map<String, Integer> paramsType; // 参数类型
private String name;//name
private Map<String, Autowired> injectConfig; // 缓存inject配置
RouteMeta对@Route注解进行解析后再封装的对象,在@Route里面配置的值都会解析成RouteMeta的属性
网友评论