frjaeger220 / google-guice

Automatically exported from code.google.com/p/google-guice
Apache License 2.0
0 stars 0 forks source link

constructor injection gives better errors than field injection for circular dependency #308

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
When using field injection, the field was set to null and I got:

1) Error in custom provider, java.lang.NullPointerException

When I changed it to use constructor injection, I got much better errors like:

1) Tried proxying com.google.jsearch.project.ProjectRegistry to support a
circular dependency, but it is not an interface.
... shows the circular dependency ...

2) Error injecting constructor, java.lang.IllegalStateException: This is a
proxy used to support circular references involving constructors. The
object we're proxying is not constructed yet. Please wait until after
injection has completed to use this object.

This was with r734.

Here's the stack trace for field injection:

    at com.google.inject.BoundProviderFactory.get(BoundProviderFactory.java:58)
    at
com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFact
oryAdapter.java:43)
    at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:847)
    at
com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactory
Adapter.java:40)
    at com.google.inject.Scopes$1$1.get(Scopes.java:49)
    at
com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProvider
Adapter.java:46)
    at
com.google.inject.SingleParameterInjector.inject(SingleParameterInjector.java:41
)
    at
com.google.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:62
)
    at
com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:90)
    at
com.google.inject.InjectorImpl$LateBoundConstructor.get(InjectorImpl.java:447)
    at
com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFact
oryAdapter.java:43)
    at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:847)
    at
com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactory
Adapter.java:40)
    at com.google.inject.Scopes$1$1.get(Scopes.java:49)
    at
com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProvider
Adapter.java:46)
    at com.google.inject.InjectorImpl$3.get(InjectorImpl.java:526)
    at
com.google.inject.SingleParameterInjector.inject(SingleParameterInjector.java:41
)
    at
com.google.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:62
)
    at
com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:90)
    at
com.google.inject.InjectorImpl$LateBoundConstructor.get(InjectorImpl.java:447)
    at
com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFact
oryAdapter.java:43)
    at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:847)
    at
com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactory
Adapter.java:40)
    at com.google.inject.Scopes$1$1.get(Scopes.java:49)
    at
com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProvider
Adapter.java:46)
    at com.google.inject.SingleFieldInjector.inject(SingleFieldInjector.java:54)
    at
com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:103)
    at
com.google.inject.InjectorImpl$LateBoundConstructor.get(InjectorImpl.java:447)
    at com.google.inject.BoundProviderFactory.get(BoundProviderFactory.java:56)
    at
com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFact
oryAdapter.java:43)
    at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:847)
    at
com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactory
Adapter.java:40)
    at com.google.inject.Scopes$1$1.get(Scopes.java:49)
    at
com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProvider
Adapter.java:46)
    at com.google.inject.InjectorBuilder$1.call(InjectorBuilder.java:200)
    at com.google.inject.InjectorBuilder$1.call(InjectorBuilder.java:194)
    at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:839)
    at
com.google.inject.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:194)
    at
com.google.inject.InjectorBuilder.injectDynamically(InjectorBuilder.java:175)
    at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:115)
    at com.google.inject.Guice.createInjector(Guice.java:92)
    at com.google.inject.Guice.createInjector(Guice.java:69)
    at com.google.inject.Guice.createInjector(Guice.java:59)

Original issue reported on code.google.com by bslesinsky on 10 Jan 2009 at 9:37

GoogleCodeExporter commented 9 years ago

Original comment by limpbizkit on 26 Apr 2009 at 9:42

GoogleCodeExporter commented 9 years ago
Tried reproducing this error message with the latest code in a number of 
different ways and can't do it.  Please re-open with a test case if you can 
still reproduce it.

Original comment by sberlin on 20 Feb 2011 at 10:57