Realm的默認架構只是項目中的所有Realm模型類。但是,您可以更改此行爲-例如,您可能希望限制Realm僅包含類的子集。爲此,請創建一個自定義RealmModule。
// 創建module
@RealmModule(classes = { Person.class, Dog.class })
public class MyModule {
}
// 在RealmConfiguration中將module設置爲僅允許該module定義的類。
RealmConfiguration config = new RealmConfiguration.Builder()
.modules(new MyModule())
.build();
// 可以將多個module組合成一個模式。
RealmConfiguration config = new RealmConfiguration.Builder()
.modules(new MyModule(), new MyOtherModule())
.build();
對於庫開發人員來說: 包含Realm的庫必須通過RealmModule
公開並使用其架構。這樣做會阻止爲庫項目生成默認的RealmModule
,這會與App使用的默認RealmModule相沖突。庫的RealmModule
也是庫嚮應用程序公開其Realm類的方式。
// 庫必須創建一個module並設置library = true。 這將阻止創建默認module。
// 可以使用allClasses = true來代替列出庫中的所有類。
@RealmModule(library = true, allClasses = true)
public class MyLibraryModule {
}
// 因此,需要圖書館項目明確設置自己的module。
RealmConfiguration libraryConfig = new RealmConfiguration.Builder()
.name("library.realm")
.modules(new MyLibraryModule())
.build();
// 應用程序可以將庫RealmModule添加到其自己的架構中。
RealmConfiguration config = new RealmConfiguration.Builder()
.name("app.realm")
.modules(Realm.getDefaultModule(), new MyLibraryModule())
.build();
一個文件中不能有多個RealmModule聲明。如果您有兩個或多個RealmModule,則必須將聲明分成多個文件,每個文件中只有一個聲明。
在此處查看有關RealmModules
如何在庫和應用程序項目之間工作的完整示例。