public abstract static class ProvisionListener.ProvisionInvocation<T> extends Object
Constructor | Description |
---|---|
ProvisionInvocation() |
Modifier and Type | Method | Description |
---|---|---|
abstract Binding<T> |
getBinding() |
Returns the Binding this is provisioning.
|
abstract List<DependencyAndSource> |
getDependencyChain() |
Deprecated.
This method is planned for removal in Guice 4.4.
|
abstract T |
provision() |
Performs the provision, returning the object provisioned.
|
public abstract Binding<T> getBinding()
You must not call Provider.get()
on the provider returned by Binding.getProvider()
, otherwise you will get confusing error messages.
public abstract T provision()
@Deprecated public abstract List<DependencyAndSource> getDependencyChain()
bindListener(Matchers.any(), new MyListener()); ... private static final class MyListener implements ProvisionListener { private final ThreadLocal<ArrayDeque<Binding<?>>> bindingStack = new ThreadLocal<ArrayDeque<Binding<?>>>() { {@literal @}Override protected ArrayDeque<Binding<?>> initialValue() { return new ArrayDeque<>(); } }; {@literal @}Override public <T> void onProvision(ProvisionInvocation<T> invocation) { bindingStack.get().push(invocation.getBinding()); try { invocation.provision(); } finally { bindingStack.get().pop(); } // Inspect the binding stack... } }
In this example the bindingStack thread local will contain a data structure that is very similar to the data returned by this list. The main differences are that linked keys are not in the stack, but such edges do exist in the static dependency graph (inspectable viaHasDependencies.getDependencies()
), so you could infer some of the missing edges..
Copyright © 2006–2018 Google, Inc.. All rights reserved.