当你的生产者方法生成一个scoped bean时,获取InjectionPoint的最简单方法是什么?由于某种原因,规范只允许在生成scoped bean时注入InjectionPoint。 有没有一种简单的方法可以做到这一点或某种bolg条目或教程?
为了澄清,这是我喜欢做的事情,但规范禁止的是:
@Produces
@RequestScoped
@MyAnnotation
private MyObject produce(InjectioPoint ip){
....
}
答案 0 :(得分:5)
让我们想象你想做的事情是可能的。您定义了@ApplicationScoped
bean:
@Produces
@ApplicationScoped
String produceMyString(InjectionPoint ip) {}
你有两个注入点:
@Inject
String myString1;
@Inject
String myString2;
由于bean是ApplicationScoped
,生成器方法只会被调用一次。由此得出的结论是,由于容器无法选择使用哪个注入点作为生产者方法的参数,因此无法得出结论。
这解释了为什么访问InjectionPoint
元数据会强制bean为@Dependent
。换句话说,CDI规范禁止这种行为,因为它导致了矛盾而不是因为任意选择。