CDI:生成scoped bean时获取InjectionPoint

时间:2015-02-25 15:39:16

标签: java cdi

当你的生产者方法生成一个scoped bean时,获取InjectionPoint的最简单方法是什么?由于某种原因,规范只允许在生成scoped bean时注入InjectionPoint。 有没有一种简单的方法可以做到这一点或某种bolg条目或教程?

为了澄清,这是我喜欢做的事情,但规范禁止的是:

@Produces
@RequestScoped
@MyAnnotation    
private MyObject produce(InjectioPoint ip){
....
}

1 个答案:

答案 0 :(得分:5)

让我们想象你想做的事情是可能的。您定义了@ApplicationScoped bean:

@Produces
@ApplicationScoped
String produceMyString(InjectionPoint ip) {}

你有两个注入点:

@Inject
String myString1;

@Inject
String myString2;

由于bean是ApplicationScoped,生成器方法只会被调用一次。由此得出的结论是,由于容器无法选择使用哪个注入点作为生产者方法的参数,因此无法得出结论。

这解释了为什么访问InjectionPoint元数据会强制bean为@Dependent。换句话说,CDI规范禁止这种行为,因为它导致了矛盾而不是因为任意选择。