Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CDI:在生成作用域bean时获取注入点_Java_Cdi - Fatal编程技术网

Java CDI:在生成作用域bean时获取注入点

Java CDI:在生成作用域bean时获取注入点,java,cdi,Java,Cdi,当生产者方法生成作用域bean时,获得注入点的最简单方法是什么?出于某种原因,该规范只允许在生成作用域bean时注入注入点。 有没有一个简单的方法可以做到这一点,或者是一些博格入门或教程 对于澄清行动,以下是我想做的,但规范禁止做的: @Produces @RequestScoped @MyAnnotation private MyObject produce(InjectioPoint ip){ .... } 让我们想象一下你想做的是可能的。您定义了一个@ApplicationSco

当生产者方法生成作用域bean时,获得注入点的最简单方法是什么?出于某种原因,该规范只允许在生成作用域bean时注入注入点。 有没有一个简单的方法可以做到这一点,或者是一些博格入门或教程

对于澄清行动,以下是我想做的,但规范禁止做的:

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

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

@Produces
@ApplicationScoped
String produceMyString(InjectionPoint ip) {}
这个bean有两个注射点:

@Inject
String myString1;

@Inject
String myString2;
由于bean是
ApplicationScoped
,producer方法将只被调用一次。由此得出结论,这是不可能的,因为容器无法选择使用哪个注射点作为生产者方法的参数


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

Hmm,我在这里可能错了,但据我所知,范围只指定注入bean的生命周期。在这种情况下,在生命周期中,生产者将为每个注入点调用一次,但不需要为每个注入点返回相同的bean。我将为此编写一个测试用例,并发布结果;producer方法只被调用一次。在这种情况下,我想知道是否有可能改变行为。我看到Omnifaces似乎已经解决了这个问题,在这个示例中,bean的作用域是
@Dependent
,由
getScope
方法返回: