Java EE 6 : @Inject and Instance<T>

jihedMaster picture jihedMaster · Feb 10, 2012 · Viewed 8.6k times · Source

I have a question about the @Inject annotation in java ee 6 :

What is the difference between :

@Inject
private TestBean test;

@Inject
private Instance<TestBean> test2;

To have the reference :

test2.get();

Some infos about Instance : http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/Instance.html

Maybe it's doesnt create the object until it's called by get() ? I just wanted to know which one is better for the jvm memory. I think direct @Inject will directly create an instance of the object , even if it's not used by the appplication...

Thank you !

Answer

Rafael picture Rafael · Jan 29, 2013

Further information on use cases for Instance can be found in documentation:

In certain situations, injection is not the most convenient way to obtain a contextual reference. For example, it may not be used when:

  • the bean type or qualifiers vary dynamically at runtime
  • there may be no bean which satisfies the type and qualifiers
  • we would like to iterate over all beans of a certain type

This is pretty cool so you can do something like

@Inject @MyQualifier Instance<MyType> allMycandidates;

So you can obtain an Iterator from allMyCandidates and iterate over all the qualified objects.