Возможно, мне что-то не хватает, но с Java 8 у нас могут быть методы по умолчанию внутри интерфейса, и я пытаюсь изменить существующий, добавляя новый метод по умолчанию, который наблюдает за событием и вызывает подпись старого метода в этом же интерфейсе, просто чтобы избежать изменений кода в устаревших Beans (в данном случае во всех @ApplicationScoped). Бывший:
public interface A {
public void oldMehtod(Event evt);
default void newMethod(@Observes Event evt) {
this.oldMehtod(Event evt);
}
}
«NewMethod» никогда не запускается компонентом, реализующим этот интерфейс. Что мне не хватает? Заранее спасибо!





Из Спецификация CDI вы можете прочитать об этом больше, чем просто эту цитату:
An observer method is a non-abstract method of a managed bean class or session bean class...
Ваш метод не относится к классу управляемого компонента. Вам нужно будет разместить этот метод в реальном классе bean-компонента, чтобы он был обнаружен.
Я не могу точно сказать, почему вы не можете иметь их на интерфейсах, но полагаю, что это жесткое ограничение. Это хороший вопрос, чтобы задать его Список рассылки CDI-dev.
Какие сомнения? Можете быть более конкретными?
Первоначальное сомнение, Силиарус. Поскольку методы по умолчанию не являются абстрактными, мой bean-компонент должен "наследовать" их от своего интерфейса или нет? Я учел ваш совет о списке рассылки CDI, но я был точен, потому что сомнения все еще остаются. Еще раз спасибо!
@Igor Оставьте пока часть спецификации non-abstract и сосредоточьтесь на of a managed bean class. Интерфейс - это не managed bean class, это просто один из bean-компонентов типы (если не будет исключен позже). См. Также эта глава
Спасибо за уделенное время, Силлиарус. Собственно, я уже читал эту цитату, но сомнения остаются.