前面几篇,断断续续地囫囵吞枣地读了ActiveAndroid的部分源码,大致了解了ActiveAndroid的注解反射原理。其中很多细节还不算很清楚,加之内容非常多,为了更好地阅读接下来的内容,在此对前面阅读的部分作一个总结。
在之前的几篇中,重点阅读了ActiveAndroid中的三个类:Conguration , ModelInfo , TableInfo。下面将对这三个类的作用做一个简单地总结:
一、Conguration
先看一下Conguration的成员变量:
public final static String SQL_PARSER_LEGACY = "legacy"; public final static String SQL_PARSER_DELIMITED = "delimited"; ////////////////////////////////////////////////////////////////////////////////////// // PRIVATE MEMBERS ////////////////////////////////////////////////////////////////////////////////////// private Context mContext; private String mDatabaseName; private int mDatabaseVersion; private String mSqlParser; private List<Class<? extends Model>> mModelClasses; private List<Class<? extends TypeSerializer>> mTypeSerializers; private int mCacheSize;
其中有,写成常量的SQL解析器
public final static String SQL_PARSER_LEGACY = "legacy"; public final static String SQL_PARSER_DELIMITED = "delimited";
数据库的上下文、
数据库的名称、
数据库的版本、
数据库的解析器、
数据库中model子类的列表、
数据库中序列化的列表、
和缓存大小。
总体来看,Conguration就是存了整个数据库的基本信息和数据库中有需要保存的类的列表。每次启动地初始化过程都会初始化这个类,并从AndroidManifest和文件中读取它的基本信息。
二、ModelInfo
同样先看一下ModelInfo的成员变量:
private Map<Class<? extends Model>, TableInfo> mTableInfos = new HashMap<Class<? extends Model>, TableInfo>(); private Map<Class<?>, TypeSerializer> mTypeSerializers = new HashMap<Class<?>, TypeSerializer>() { { put(Calendar.class, new CalendarSerializer()); put(java.sql.Date.class, new SqlDateSerializer()); put(java.util.Date.class, new UtilDateSerializer()); put(java.io.File.class, new FileSerializer()); } };
ModelInfo的成员变量只有两个mTableInfos和mTypeSerializers。
mTableInfos储存了每个需要储存的类与TableInfo的映射关系。
mTypeSerializers储存了每个序列化的接口。
每当用户要对要储存的类进行读/写操作时,就需要从mTableInfos这个map中找到属于自己的TableInfo,然后根据TableInfo中信息进行相关操作。
三、TableInfo
TableInfo的成员变量如下:
private Class<? extends Model> mType; private String mTableName; private String mIdName = Table.DEFAULT_ID_NAME; private Map<Field, String> mColumnNames = new LinkedHashMap<Field, String>();
分别是:
TableInfo对应的类、
这个类对应的表名、
这个表的Id字段名、
这个类和表中,成员和字段名的对应关系。
当我们调用要储存的类的相关方法时,这个类就会找到它的TableInfo,然后根据mColumnNames的映射去操作数据库中的对应字段。
Done~