CDI @Produces Javado c объяснение требований - PullRequest
1 голос
/ 11 марта 2020

Мне интересно об этом требовании, описанном в @ Produces Javado c:

Если метод производителя иногда возвращает нулевое значение, или если поле источника иногда содержит нулевое значение при доступе, то метод или поле производителя должны иметь область видимости @ Зависимый.

Какова связь между объемом и произведенной стоимостью?

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

К каждому бину в CDI прикреплена область видимости. Область действия определяет контекст, в котором она живет, что, в свою очередь, контролирует жизненный цикл ее компонентов. Даже если вы не указали явно область действия, она всегда есть; @Dependent предполагается, если никакая другая область не была указана.

Теперь, bean-компонент может быть классом, методом-производителем или полем производителя (на самом деле есть синтетические c, слишком мало других вещей можно считать 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 от производителей является довольно редким случаем использования, но, тем не менее, значение c должно быть ясным.

0 голосов
/ 13 марта 2020

Объективная аннотация на методе производителя условно описывает производимую вещь. В этом предложении говорится, что только когда @Dependent комментирует ваш метод-производитель, его возвращаемые значения могут быть null. Другими словами, объект null при создании методом-производителем или полем-производителем может быть только членом области действия @Dependent.

...