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