CDI @产生Javadoc需求说明

时间:2020-03-11 08:34:19

标签: java jakarta-ee cdi javabeans producer-consumer

我想知道 @产品 Javadoc中描述的这一要求:

如果生产者方法有时返回空值,或者生产者 字段有时在访问时包含空值,然后是生产者 方法或字段的作用域必须为@Dependent。

范围和产值之间有什么关系?

2 个答案:

答案 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是一个相当罕见的用例,但仍然需要明确说明。