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月帝,主要是裝載了各種映射關(guān)系躏惋,比較簡(jiǎn)單
// 裝載了所有的分組映射類,key是分組名嚷辅,value是group映射的類名
static Map<String, Class<? extends IRouteGroup>> groupsIndex = new HashMap<>();
// 裝載了所有的直接映射關(guān)系簿姨,各個(gè)分組內(nèi)的詳細(xì)的映射關(guān)系,value是path簸搞,value是RouteMeta
static Map<String, RouteMeta> routes = new HashMap<>();
// 裝載了所有的服務(wù)提供者的映射扁位,value是IProvider對(duì)應(yīng)的class,value是對(duì)應(yīng)的服務(wù)提供者趁俊,所以IProvider是單例域仇,每一個(gè)類只有一個(gè)value
static Map<Class, IProvider> providers = new HashMap<>();
//服務(wù)提供者IProvider的映射,key是類名寺擂,value是RouteMeta
static Map<String, RouteMeta> providersIndex = new HashMap<>();
// 攔截器的映射殉簸,key為攔截器Interceptor的優(yōu)先級(jí),用的是UniqueKeyTreeMap沽讹,不允許有相同優(yōu)先級(jí)的攔截器
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類的使用,下面在詳細(xì)分析下RouteMeta
private RouteType type; // 路由類型武鲁,有ACTIVITY爽雄,F(xiàn)RAGMENT,PROVIDER等
private Element rawType; // 路由的原始類型
private Class<?> destination; // 目標(biāo)類
private String path; // Path
private String group; // Group
private int priority = -1; // 優(yōu)先級(jí)沐鼠,值越小優(yōu)先級(jí)越高
private int extra; // 可以用于做一些是否需要登陸需求挚瘟,
private Map<String, Integer> paramsType; // 參數(shù)類型
private String name;//name
private Map<String, Autowired> injectConfig; // 緩存inject配置
RouteMeta對(duì)@Route注解進(jìn)行解析后再封裝的對(duì)象,在@Route里面配置的值都會(huì)解析成RouteMeta的屬性