by ampatspell
in Code
Gaeds is my tiny AppEngine for Java low-level DatastoreService wrapper. I’ve started the work on version 1.2 what will have few nice additions but for now a small breaking change.
Previous versions was configured something like this:
public class GaedsModule extends AbstractModule { @Override protected void configure() { install(new GaedsBaseModule()); bind(DatastoreService.class).annotatedWith(Gaeds.class). toProvider(DatastoreServiceProvider.class); bind(IncompatiblePropertiesLogger.class). to(IncompatiblePropertiesLoggerImpl.class); } @Provides @Singleton public List<Converter> provideConverters( @Named("default") List<Converter> defaultConverters) { return defaultConverters; } @Provides @ModelClasses @Singleton public List<Class<?>> provideModelClasses() { List<Class<?>> classes = new ArrayList<Class<?>>(); classes.add(Zeeba.class); classes.add(Larry.class); return classes; } }
Now configuration looks a lot better:
public class GaedsModule extends AbstractGaedsModelsModule { @Override protected void configureModels() { install(new GaedsBaseModule()); bind(DatastoreService.class).annotatedWith(Gaeds.class). toProvider(DatastoreServiceProvider.class); bind(IncompatiblePropertiesLogger.class). to(IncompatiblePropertiesLoggerImpl.class); // Models model(Zeeba.class); model(Larry.class); // Converters useDefaultConverters(true); converter(SomeCustomConverter.class); } }
In addition to to cleaner gaeds module, model classes and converters are bound using Multibinder so it’s perfectly fine to install multiple AbstractGaedsModule derived modules in one Guice Injector. There are only two things to keep in mind:
Model class and Converter duplicates are not allowed (guice will complain)useDefaultConverters(boolean) only once (in one AbstractGaedsModule)