CDI:生成scoped bean时获取InjectionPoint

Phi*_*lBa 3 java cdi

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

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

@Produces
@RequestScoped
@MyAnnotation    
private MyObject produce(InjectioPoint ip){
....
}
Run Code Online (Sandbox Code Playgroud)

小智 5

让我们想象你想做什么是可能的.你有一个@ApplicationScopedbean定义:

@Produces
@ApplicationScoped
String produceMyString(InjectionPoint ip) {}
Run Code Online (Sandbox Code Playgroud)

你有两个注入点:

@Inject
String myString1;

@Inject
String myString2;
Run Code Online (Sandbox Code Playgroud)

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

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