[OmniFaces utilities] The
getCurrentInjectionPoint()
gets the current injection point when called from a context where injection is taking place (e.g. from a producer).This is mostly intended to be used from within a dynamic producer Bean
. For a "regular" producer (using Produces
) an InjectionPoint
can either be injected into the bean that contains the producer method, or directly provided as argument of said method.Method:
JSF page
...
<h:body>
<h:form>
<h:commandButton value="BeanA"
action="#{beanA.randomNumberA()}"/>
</h:form>
<h:form>
<h:commandButton value="BeanB"
action="#{beanB.randomNumberB()}"/>
</h:form>
</h:body>
...
DynamicProducer
(see Dynamic CDI producers, 1 August 2014, by: Arjan Tijms)
import
javax.enterprise.inject.spi.InjectionPoint;
import
org.omnifaces.util.Beans;
public class
DynamicIntegerProducer implements Bean<Integer> {
...
@Override
public Integer create(CreationalContext<Integer>
creationalContext) {
InjectionPoint injectionPoint =
Beans.getCurrentInjectionPoint(creationalContext);
System.out.println("Current Injection
Point: " + injectionPoint);
// do something with the injection point
return
new Random().nextInt(1000);
}
...
}
BeanA
@Named
@RequestScoped
public class
BeanA {
@Inject
private Integer rndA;
public void randomNumberA() {
System.out.println("Injected random
number in BeanA: " + rndA);
}
}
BeanB
@Named
@RequestScoped
public class
BeanB {
@Inject
private Integer rndB;
public void randomNumberB() {
System.out.println("Injected random
number in BeanB: " + rndB);
}
}
Now, press
button
BeanA and afterwards button, BeanB. You will see this output:
Current
Injection Point: [BackedAnnotatedField] @Inject private some.beans.BeanA.rndA
Injected
random number in BeanA: 538
Current
Injection Point: [BackedAnnotatedField] @Inject private some.beans.BeanB.rndB
Injected
random number in BeanB: 266
API
GH-SOURCE GH-EXAMPLE[CDIDynamicProducer]
Niciun comentariu :
Trimiteți un comentariu