@Override public <T> Provider<T> getProvider(Class<T> clazz, String name) { crashIfClosed(); return new ThreadSafeProviderImpl<>(this, clazz, name, false); }
@Override public T get() { //the first test avoids accessing a volatile when not needed if (isLazy && instance != null) { return instance; } //ensure both sync for DSL //and sync around provider //so that dev's providers don't deal with concurrency synchronized (this) { if (isLazy) { //DCL if (instance == null) { instance = getScope().getInstance(clazz, name); scope.clear(); } return instance; } return getScope().getInstance(clazz, name); } }
@Override public <T> Lazy<T> getLazy(Class<T> clazz, String name) { crashIfClosed(); return new ThreadSafeProviderImpl<>(this, clazz, name, true); }
@Override public T get() { //the first test avoids accessing a volatile when not needed if (isLazy && instance != null) { return instance; } //ensure both sync for DSL //and sync around provider //so that dev's providers don't deal with concurrency synchronized (this) { if (isLazy) { //DCL if (instance == null) { instance = getScope().getInstance(clazz, name); scope.clear(); } return instance; } return getScope().getInstance(clazz, name); } }
@Override public <T> Provider<T> getProvider(Class<T> clazz, String name) { crashIfClosed(); return new ThreadSafeProviderImpl<>(this, clazz, name, false); }
@Override public <T> Lazy<T> getLazy(Class<T> clazz, String name) { crashIfClosed(); return new ThreadSafeProviderImpl<>(this, clazz, name, true); }
@Override public <T> Provider<T> getProvider(Class<T> clazz) { InternalProviderImpl<? extends T> provider = lookupProvider(clazz, null); return new ThreadSafeProviderImpl<>(this, provider, false); }
@Override public <T> Lazy<T> getLazy(Class<T> clazz) { InternalProviderImpl<? extends T> provider = lookupProvider(clazz, null); return new ThreadSafeProviderImpl<>(this, provider, true); }
@Override public <T> Provider<T> getProvider(Class<T> clazz, String name) { InternalProviderImpl<? extends T> provider = lookupProvider(clazz, name); return new ThreadSafeProviderImpl<>(this, provider, false); }
@Override public <T> Lazy<T> getLazy(Class<T> clazz, String name) { InternalProviderImpl<? extends T> provider = lookupProvider(clazz, name); return new ThreadSafeProviderImpl<>(this, provider, true); }