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)系,比較簡單
// 裝載了所有的分組映射類,key是分組名,value是group映射的類名
static Map<String, Class<? extends IRouteGroup>> groupsIndex = new HashMap<>();
// 裝載了所有的直接映射關(guān)系,各個分組內(nèi)的詳細(xì)的映射關(guān)系,value是path,value是RouteMeta
static Map<String, RouteMeta> routes = new HashMap<>();
// 裝載了所有的服務(wù)提供者的映射,value是IProvider對應(yīng)的class,value是對應(yīng)的服務(wù)提供者,所以IProvider是單例,每一個類只有一個value
static Map<Class, IProvider> providers = new HashMap<>();
//服務(wù)提供者IProvider的映射,key是類名,value是RouteMeta
static Map<String, RouteMeta> providersIndex = new HashMap<>();
// 攔截器的映射,key為攔截器Interceptor的優(yōu)先級,用的是UniqueKeyTreeMap,不允許有相同優(yōu)先級的攔截器
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)先級,值越小優(yōu)先級越高
private int extra; // 可以用于做一些是否需要登陸需求,
private Map<String, Integer> paramsType; // 參數(shù)類型
private String name;//name
private Map<String, Autowired> injectConfig; // 緩存inject配置
RouteMeta對@Route注解進(jìn)行解析后再封裝的對象,在@Route里面配置的值都會解析成RouteMeta的屬性