@Inject public MigrationEngineProvider(Injector injector, NinjaProperties ninjaProperties) { this.factory = new ImplFromPropertiesFactory<>( injector, ninjaProperties, NinjaConstant.MIGRATION_ENGINE_IMPLEMENTATION, MigrationEngine.class, "ninja.migrations.flyway.MigrationEngineFlyway", true, logger); }
@Override public Postoffice get() { return factory.create(); } });
public T create() { return this.injector .getInstance(getImplementationClass()); }
public Class<? extends T> getImplementationClass() { Class<? extends T> implementationClass = this.implementationClassRef.get(); if (implementationClass != null) { return implementationClass; } // first one wins in case multiple threads get here... this.implementationClassRef.compareAndSet(null, resolveImplementationClass()); return this.implementationClassRef.get(); }
private Class<? extends T> resolveImplementationClass() { String implementationClassName = ninjaProperties.get(propertyName); Class<? extends T> implementationClass = null; if (implementationClassName != null) { // resolve or throw exception implementationClass = resolveClass(implementationClassName, targetClass, propertyName, true); logger.info("Using {} as implementation for {}", implementationClassName, targetClass.getCanonicalName()); } else { if (defaultClassName != null) { // resolve or throw exception implementationClass = resolveClass(defaultClassName, targetClass, propertyName, false); logger.info("Using {} as default implementation for {}", defaultClassName, targetClass.getCanonicalName()); } } return implementationClass; }
this.implementationClassRef.set(resolveImplementationClass());
@Inject public CacheProvider(Injector injector, NinjaProperties ninjaProperties) { this.factory = new ImplFromPropertiesFactory<>( injector, ninjaProperties, NinjaConstant.CACHE_IMPLEMENTATION, Cache.class, "ninja.cache.CacheEhCacheImpl", true, logger); // lazy singleton this.supplier = Suppliers.memoize(new Supplier<Cache>() { @Override public Cache get() { return factory.create(); } }); }
@Override public Cache get() { return factory.create(); } });
@Inject public PostofficeProvider(Injector injector, NinjaProperties ninjaProperties) { this.factory = new ImplFromPropertiesFactory<>( injector, ninjaProperties, PostofficeConstant.postofficeImplementation, Postoffice.class, (ninjaProperties.isProd() ? "ninja.postoffice.commonsmail.PostofficeCommonsmailImpl" : PostofficeMockImpl.class.getCanonicalName()), true, logger); // lazy singleton this.supplier = Suppliers.memoize(new Supplier<Postoffice>() { @Override public Postoffice get() { return factory.create(); } }); }
@Override public MigrationEngine get() { return factory.create(); }