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