Специализированные компоненты CDI больше не наследуют область видимости?JAVA

Программисты JAVA общаются здесь
Anonymous
Специализированные компоненты CDI больше не наследуют область видимости?

Сообщение Anonymous »

Итак, мы работаем над обновлением проекта с JavaEE8 до JakartaEE10.
В конечном файле войны у нас есть библиотека в виде jar, которая представляет собой неявный архив bean-компонентов (поэтому нет beans.xml). Он содержит следующее:

Код: Выделить всё

@Named("a")
@RequestScoped
public class A { ... }
Затем в основном проекте:

Код: Выделить всё

@Specializes
public class B extends A { ... }
И

Код: Выделить всё

@Named("c")
@RequestScoped
public class C {

@Inject
private B b;

...
}
Теперь этот код не изменился, но при его запуске в Java17 и JEE10 (то есть CDI 4.0) происходит сбой следующим образом:
Причина: org.jboss.weld.Exceptions.DeploymentException: WELD-001408: неудовлетворенные зависимости для типа B с квалификаторами @Default
Когда я добавляю область через аннотацию к B, это работает, но почему?
Аннотации родительского класса больше не наследуются специализированным классом компонента?
UPDATE
Таким образом, оказывается, что режим обнаружения компонента по умолчанию изменился с ALL на ANNOTATED с CDI 3.0 на CDI 4.0.
Я также могу подтвердить это явно установка базового проекта в режим обнаружения ВСЕ решает проблему.
Поэтому похоже, что @Specializes не является аннотацией, определяющей компонент. И после проверки определения его действительно нет в списке.
Но какой в ​​этом смысл? @Specializes — это аннотация компонента на уровне класса, которая точно указывает на то, что это компонент, так почему же она не определяет компонент?

Вернуться в «JAVA»