我想知道 @产品 Javadoc中描述的这一要求:
如果生产者方法有时返回空值,或者生产者 字段有时在访问时包含空值,然后是生产者 方法或字段的作用域必须为@Dependent。
范围和产值之间有什么关系?
答案 0 :(得分:0)
生产者方法上的范围注释概念上描述了所生产的东西。这句话说,只有当@Dependent
注释您的生产者方法时,它的返回值才可能是null
。换句话说,null
对象是通过生产者方法或生产者字段产生的,只能成为@Dependent
范围的成员。
答案 1 :(得分:0)
CDI中的每个bean都有一个附加的作用域。范围确定了它所处的上下文,进而控制了它的bean的生命周期。即使您没有明确说明范围,也总会有一个范围。如果未指定其他范围,则假定为@Dependent
。
现在,一个bean可以是一个类,生产者方法或生产者字段(实际上是合成的,可以认为bean的其他东西太多了,但让我们暂时忽略)。因此,甚至生产者也需要定义他们生产的bean的范围。
这是一些代码:
@Produces
@Dependent //annotatation is not needed, it would be assumed automatically
public String produceDependentBean() {
if (isTodayMonday()) {
return null;
} else {
return "foo";
}
}
// this one is going to throw an exception once used, you cannot return null and have other then dependent scope
@Produces
@ApplicationScoped
public String produceIllegalStuff() {
return null;
}
您引用的规范部分仅表示,如果生产者方法在某些情况下返回null
,则必须为@Dependent
。值得注意的是,从生产者那里退回null
是一个相当罕见的用例,但仍然需要明确说明。